在OpenCV中使用ROI?

use*_*485 7 c++ video opencv roi contour

ROI只能用矩形实现.然而,我有一个轮廓,我想设置为ROI.有没有人知道如何使用轮廓作为ROI而不是矩形?

否则,如果不可能,我怎样才能将我的动作仅集中在特定轮廓的像素中?

谢谢

PS:对不起所有这些OpenCV问题.真的很困惑:$

Sam*_*Sam 7

OpenCV仅支持矩形ROI.

但是,要对特定像素进行一些处理,可以使用一些辅助函数.

其中之一是pointPolygonTest(),它告诉您给定的像素不属于多边形.

所以你可以写一些像

for(i=0;i<height;i++)
{
      for(j=0;j<width;j++)
      {
          if(pointPolygonTest(Point(i,j),myPolygon))
          {
                 // do some processing
          }
      }
}
Run Code Online (Sandbox Code Playgroud)

另请查看此示例 http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.html#point-polygon-test

另一个(更快)选项是由@ andeas-haferburg提供的选项.通过在新的灰度图像中绘制多边形来制作蒙版:

drawPoly() 
Run Code Online (Sandbox Code Playgroud)

(因此背景为0,多边形为255),然后您可以传递给其他一些函数,或者自己使用它:

for(i=0;i<height;i++)
{
      for(j=0;j<width;j++)
      {
          if(mask[j+w*i]))
          {
                 // do some processing
          }
      }
}
Run Code Online (Sandbox Code Playgroud)

上面的例子只是伪代码,你必须让它工作.