在本文中,我們將看到 OpenCV 庫的一個有趣應用,即 selectROI()。使用這種方法,我們可以通過選擇圖像上的區域來手動選擇圖像中感興趣的範圍。
用法:cv2.selectROI(Window_name, source image)
參數:
- window_name:將顯示選擇過程的窗口的名稱。
- 源圖像:用於選擇 ROI 的圖像。
- showCrosshair:如果選擇矩形的真正的十字準線將被顯示。
- fromCenter:如果選擇的真實原點將匹配初始鼠標位置
在 OpenCV 中使用此函數,我們可以精確地手動從圖像中選擇我們需要的感興趣區域,因此我們可以針對該特定區域執行許多任務。我們可以將該特定區域作為另一個任務的輸入傳遞。我們還可以使用坐標在區域上繪製跟蹤圖形(矩形),或者我們可以精確自由地裁剪圖像。首先,我們需要導入所需的庫,在我們的例子中是 OpenCV 和 NumPy。 NumPy 庫在該程序中起著非常重要的作用,因為 OpenCV 使用 NumPy 作為主幹來進行所有圖像處理。
在對圖像執行各種函數之前,顯然首先要讀取圖像。並將其存儲在一個變量中,以便將來訪問它以進行進一步的操作。
用法:
cv2.imread(source image)
現在我們進入實際函數 selectROI()。因此,本質上,此函數將允許我們選擇圖像中感興趣的範圍(圖像的特定區域)並在該區域執行不同的操作,在此特定示例中,我們將裁剪圖像以顯示裁剪後的圖像.
現在我們將調用 selectRoi() 函數並將圖像作為參數傳入,該函數將返回一個包含所選區域坐標的不同值的數組,我們將其存儲在名為 “r” 的變量中。這本質上是圖像中所選區域的開始和結束像素以及按 [Top_X, Top_Y, Bottom_X, Bottom_Y] 順序的輸出數組
在 OpenCV 中,x 和 y 坐標是交換的,
注意:這個 selectedROI() 函數有自己的默認輸出,它會自動向我們顯示圖像,讓我們手動選擇圖像中的 ROI。我們還可以通過在 function() 中傳遞 windowname 參數來命名該窗口
函數控製:選擇ROI後,我們被要求按空格鍵或回車繼續選擇區域。和 C 取消選擇。使用這些坐標,我們將選擇特定的選定區域並將其裁剪並顯示輸出。要使用 NumPy 數組裁剪圖像,
用法:
source_image[ start_row:end_row, start_col:end_col]
我們應該在其中傳遞圖像的開始和結束像素值的值。最後,我們將展示裁剪後的圖像並破壞窗戶。
程序:程序選擇和裁剪圖像。
Python3
import cv2
import numpy as np
# Read image
image = cv2.imread("image.png")
# Select ROI
r = cv2.selectROI("select the area", image)
# Crop image
cropped_image = image[int(r[1]):int(r[1]+r[3]),
int(r[0]):int(r[0]+r[2])]
# Display cropped image
cv2.imshow("Cropped image", cropped_image)
cv2.waitKey(0)
輸出:
相關用法
- Python OpenCV setWindowTitle()用法及代碼示例
- Python OpenCV resizeWindow()用法及代碼示例
- Python OpenCV waitKey()用法及代碼示例
- Python OpenCV waitKeyEx()用法及代碼示例
- Python OpenCV getRotationMatrix2D()用法及代碼示例
- Python OpenCV destroyAllWindows()用法及代碼示例
- Python OpenCV namedWindow()用法及代碼示例
- Python OpenCV imdecode()用法及代碼示例
- Python OpenCV getTrackbarPos()用法及代碼示例
- Python OpenCV Filter2D()用法及代碼示例
- Python OpenCV Canny()用法及代碼示例
- Python OpenCV setTrackbarPos()用法及代碼示例
- Python OpenCV getgaussiankernel()用法及代碼示例
- Python OpenCV haveImageReader()用法及代碼示例
注:本文由純淨天空篩選整理自sanjaysdev0901大神的英文原創作品 Python OpenCV – selectroi() Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。