C++ 如何找到图像的非方形ROI?
我正在寻找一种方法来找到一个非正方形的感兴趣区域。我在这里看到的例子都是基于矩形的。例如我看过一些代码示例,比如当你把鼠标从一个角拖到另一个角时,他们会画一个矩形 我的目标是拍摄一张像下面这样的照片,并用手勾勒出道路的轮廓。这是可能的还是我只需要在上面画一个矩形 编辑:我最初的想法是建立在这些算法的基础上,而不是将鼠标点击标记为角点,我认为我可以将访问的每个点存储在一个向量中。然后我可以使用cv::Mat来填充中间的所有点。不确定它是否会起作用,但这只是一个开始C++ 如何找到图像的非方形ROI?,c++,opencv,image-processing,motion-detection,roi,C++,Opencv,Image Processing,Motion Detection,Roi,我正在寻找一种方法来找到一个非正方形的感兴趣区域。我在这里看到的例子都是基于矩形的。例如我看过一些代码示例,比如当你把鼠标从一个角拖到另一个角时,他们会画一个矩形 我的目标是拍摄一张像下面这样的照片,并用手勾勒出道路的轮廓。这是可能的还是我只需要在上面画一个矩形 编辑:我最初的想法是建立在这些算法的基础上,而不是将鼠标点击标记为角点,我认为我可以将访问的每个点存储在一个向量中。然后我可以使用cv::Mat来填充中间的所有点。不确定它是否会起作用,但这只是一个开始 如果您想手动标记该区域,则可以使
如果您想手动标记该区域,则可以使用图形图像编辑环境(如GIMP、Photoshop或MATLAB)来避免麻烦 您还可以使用图像绘制一个窗口,然后调用:
cvSetMouseCallback( const char* window_name, CvMouseCallback on_mouse, void* param=NULL )
每次单击列表、数组、dict中的x、y位置时,都可以保存它,如:)。使用此信息构建一个新的垫作为遮罩。使用多边形进行近似:
// Create Polygon from vertices
vector<Point> ROI_Poly;
approxPolyDP(ROI_Vertices, ROI_Poly, 1.0, true);
// Fill polygon white
fillConvexPoly(mask, &ROI_Poly[0], ROI_Poly.size(), 255, 8, 0);
//从顶点创建多边形
向量ROI_Poly;
APROXPOLYDP(ROI_顶点,ROI_多边形,1.0,真);
//填充多边形白色
FILLCONVERXPOLY(掩模,&ROI_Poly[0],ROI_Poly.size(),255,8,0);
更多信息请点击此处:
顺便说一句,图片很好。因此,一般情况下,框是简单的。但正如你正确指出的那样,它们对道路和天空等无定形的“东西”并不那么好。你有几个选择
但请注意,我自己并没有尝试过实现这样的功能,我的回答只是想让您了解两种尝试的可能性。哇,这很好。很抱歉延迟回信,但这非常有效。谢谢你的帮助。嘿,对不起,我花了一段时间才回来,但是谢谢你的帮助。我考虑过使用QT来生成ROI,可能仍然会,但从来没有弄糟过。他明确提到使用OpenCV