OpenCV 在ImShow窗體上選擇感興趣的區域
窗體上選擇感興趣ROI區域
在計算機視覺處理中, 通常是針對圖像中的一個特定區域進行處理, 有時候這個特定區域需要人來選擇, OpenCV 也提供了窗口選擇ROI機制.
窗體支持兩種選擇ROI區域的方法, 一個是單選, 一個是多選, 操作方法如下:
- 單選: 通過鼠標在屏幕上選擇區域, 然后通過"空格鍵" 或 "回車鍵"完成確定, 或者通過"C"鍵取消, 對應的 SelectROI()函數返回一個Rect對象, 如果取消選擇, 返回值為 Rect.Empty
- 多選: 通過鼠標鍵屏幕上完成多次選擇, 每一次是通過"空格鍵" 或 "回車鍵"完成確定, 最后一次通過"ESC"結束選擇.
- 單選的函數是 Cv2.SelectROI()
- 多選的函數是 Cv2.SelectROIs()
測試代碼
private void readWriteTest()
{
string pngFile = @"D:\my_workspace\opencv\images\draw.png";
var srcMat = Cv2.ImRead(pngFile, ImreadModes.Color);
Cv2.ImShow("srcMat", srcMat);
//選擇單個 ROI
var rect = Cv2.SelectROI("srcMat", srcMat, true);
if (rect != OpenCvSharp.Rect.Empty)
{
Cv2.ImShow("Single ROI", srcMat[rect]);
}
//選擇多個 ROI
var rects = Cv2.SelectROIs("srcMat", srcMat, true);
int i = 0;
foreach (var myRect in rects)
{
if (myRect != OpenCvSharp.Rect.Empty)
{
i++;
Cv2.ImShow($"Mulptie ROI #{i}", srcMat[myRect]);
}
}
Cv2.WaitKey();
Cv2.DestroyAllWindows();
}
測試結果截圖:


浙公網安備 33010602011771號