現在的圖片都蠻大張的,若整張丟下去做AVI檢測,相對的時間會要比較久一點,事先擷取出感興趣的區域來檢測,就會縮短整個測試的時間。
本文主要提供一個擷取ROI的函式。
從圖片中裁剪出指定的感興趣區域(ROI)。def crop_img(img, x, y, h, w):
"""
從圖片中裁剪出 ROI(感興趣區域)。
參數:
img (numpy.ndarray): 要裁剪的圖片。
x (int): 感興趣區域的左上角 x 坐標。
y (int): 感興趣區域的左上角 y 坐標。
h (int): 感興趣區域的高度。
w (int): 感興趣區域的寬度。
返回:
numpy.ndarray: 裁剪後的圖片。
"""
return img[y:y+h, x:x+w]
參數:
- img: 這是輸入的圖片,應該是一個 NumPy 陣列,通常來自於讀取的圖像文件。
- x: 感興趣區域的左上角 x 坐標,定義裁剪區域的起始水平位置。
- y: 感興趣區域的左上角 y 坐標,定義裁剪區域的起始垂直位置。
- h: 感興趣區域的高度。
- w: 感興趣區域的寬度。
返回值:
- 函數返回裁剪後的圖片,該圖片也是一個 NumPy 陣列。
使用範例:
假設有一張圖片 img
,並且希望從 (50, 100) 開始,裁剪出一個寬 200 高 150 的區域,可以這樣使用:
codecropped_img = crop_img(img, 50, 100, 150, 200)
這段程式碼將返回從 (50, 100) 到 (250, 250) 的區域。
實際演練
import cv2
def crop_img(img, x, y, h, w):
"""
從圖片中裁剪出 ROI(感興趣區域)。
參數:
img (numpy.ndarray): 要裁剪的圖片。
x (int): 感興趣區域的左上角 x 坐標。
y (int): 感興趣區域的左上角 y 坐標。
h (int): 感興趣區域的高度。
w (int): 感興趣區域的寬度。
返回:
numpy.ndarray: 裁剪後的圖片。
"""
return img[y:y+h, x:x+w]
path = '圖片路徑'
img = cv2.imread(path)
out = crop_img(img,105,226,133,182) #輸入圖片座標 高寬
cv2.imshow('out',out)
cv2.waitKey(0)
假設今天我對狗的圖像比較感興趣時,想要擷取牠的頭像,可以開啟小畫家來查看座標及高寬設定。X,Y座標(105,226) 高133寬182
開啟小畫家來查看

結果圖
