2024-08-22|閱讀時間 ‧ 約 4 分鐘

[OpenCV][Python]裁剪圖片(ROI擷取)

現在的圖片都蠻大張的,若整張丟下去做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

開啟小畫家來查看

結果圖




分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.