在OpenCV中使用ROI?

7

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

如果不可能的话,我该如何仅在特定轮廓中聚焦我的操作?

谢谢。

PS:对于所有这些OpenCV问题,很抱歉。只是真的很困惑:$


标题中有一个拼写错误。此外,大多数OpenCV函数都有一个掩码参数,并且仅在输入的区域掩码具有特殊值时才运行。您实际想要做什么? - Andreas Haferburg
1
我想在预定义的轮廓上使用直方图反向投影来处理像素。所以基本上,我只需创建该填充轮廓的黑白掩模,然后将其用作我要对其进行直方图反向投影的图像的掩模即可。 - user1017485
如果你想获取轮廓中的像素,如之前建议的那样使用轮廓遮罩(在黑色背景上绘制白色轮廓线,然后将其用作原始图像的掩膜)是显而易见的方法。 - AruniRC
1个回答

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
          }
      }
}

请查看此示例http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.html#point-polygon-test。另一个(更快)的选项是由@andeas-haferburg建议的方法。在新的灰度图像中绘制您的多边形,以创建掩码:
drawPoly() 

(因此,背景为0,多边形为255),然后您可以将其传递给其他函数或自己使用:
for(i=0;i<height;i++)
{
      for(j=0;j<width;j++)
      {
          if(mask[j+w*i]))
          {
                 // do some processing
          }
      }
}

上面的示例只是伪代码,您需要让它正常工作。

@user1017485,你解决了如何做吗?我也遇到了类似的问题。 - Mzk
@user1017485,你解决了这个问题吗?我也想知道怎么做。 - bearzk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接