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();
}
测试结果截图: