剪裁影像
這篇教學會介紹使用 OpenCV,將圖片剪裁出想要的範圍,並另存成新的圖片。
快速導覽:
因為程式中的 OpenCV 會需要使用鏡頭或 GPU,所以請使用本機環境 ( 參考:使用 Python 虛擬環境 ) 或使用 Anaconda Jupyter 進行實作 ( 參考:使用 Anaconda ) ,並安裝 OpenCV 函式庫 ( 參考:OpenCV 函式庫 )。
使用陣列切片裁剪圖片
在 OpenCV 裡讀取的影像,實質上是 NumPy 的陣列,因此在讀取影像後,使用陣列的切片方式,取出想要的範圍,另存成新的圖片,就可以實現剪裁圖片的效果,下方的程式碼會從圖片中 (100,100) 的位置,剪裁出一個 200x200 的區域儲存為新影像。
參考:NumPy 陣列項目賦值
import cv2
img = cv2.imread('meme.jpg')
x = 100
y = 100
w = 200
h = 200
crop_img = img[y:y+h, x:x+w] # 取出陣列的範圍
cv2.imwrite('output.jpg', crop_img) # 儲存圖片
cv2.imshow('oxxostudio', crop_img)
cv2.waitKey(0) # 按下任意鍵停止
cv2.destroyAllWindows()
將裁剪的圖片,貼到其他圖片中
運用同樣的原理 ( 剪裁出來的區域是陣列 ),就能將剪裁的區域,放到其他圖片中指定的位置,下方的程式碼,會將剪裁出來的圖片,放到另外一張黑色畫布中 (100, 100) 的位置。
import cv2
import numpy as np
img = cv2.imread('meme.jpg')
x = 100
y = 100
w = 200
h = 200
crop_img = img[y:y+h, x:x+w]
output = np.zeros((360,480,3), dtype='uint8')
output[x:x+w, y:y+h]=crop_img
cv2.imwrite('output.jpg', output)
cv2.imshow('oxxostudio', output)
cv2.waitKey(0)
cv2.destroyAllWindows()
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~