iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
1

上一章介紹了如何用 Opencv 進行讀取、儲存圖片,以及將圖片從彩色轉成灰階的兩種方法,本章會講怎麼對圖片進行切割。

除了一定要有的cv2之外,這次還會用到負責陣列處理的Numpy函式庫,在開頭匯入函式庫時一併寫下:

import cv2
###這裡多加一行import
import numpy as np

img = cv2.imread('image.jpg')

當我們執行 cv2.imread 函數引入外部圖片存進自訂變數時,圖片被視為一個由像素點組成、行列等同於圖片高度和寬度的二維陣列,而我們針對圖片進行的處理其實是對二維陣列進行操作。

使用type函數印出變數型態:

查看變數型態

type(img)

<class 'numpy.ndarray'>

可以看到圖片被定義成一個Numpy的二維陣列。

在變數後面加上 shape 函數,可以顯示出圖片的詳細資料:

圖片資訊

img.shape

(1080, 1920, 3)

這三個數字分別代表圖片的長度、寬度和色調,第三個參數是3代表讀取到的是一張彩色圖片,若數值為1則是灰階圖片。

在Python中想要切割圖片其實非常簡單,我們知道引入的圖片被轉成一個二維陣列,那麼只需要把想從原始圖片擷取出來的畫面用矩陣劃分的方式定義出來,並且存到一個新的變數,就等同於對圖片進行切割。

左上角座標,參數自行設定

ltop = (100, 100)

右下角座標,參數自行設定

rtbm = (200, 200)

使用上述座標位置, 把畫面擷取出來

img_cap = img[ltop[1]:rtbm[1], ltop[0]: rtbm[0]]

可以用 cv2.imshow 函數測試一下,擷取畫面是否正常:

顯示圖片

cv2.imshow('Image', img_cap)

測試成功之後,可以按照上一章所講的儲存方式把擷取圖片存下來:

圖片存檔

cv2.imwrite('output.jpg', img_cap)

別忘了在最後加上:

等待並關閉所有視窗

cv2.waitKey(0)
cv2.destroyAllWindows()

以上,就是運用座標擷取圖片的方法,下一章會介紹該如何用函數使圖片進行翻轉和方向調換。


上一篇
Day3-基本指令與彩色灰階
下一篇
Day5-圖片旋轉1
系列文
OpenCV 從零開始的影像處理30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言