处理轮廓中的像素(OpenCV)?

时间:2011-11-16 00:17:23

标签: c++ algorithm opencv

我从图像中检索了轮廓,并希望专门处理轮廓中的像素。我需要找到轮廓中像素值的总和(不是面积)。 OpenCV只支持矩形ROI,所以我不知道如何做到这一点。 cvSum也只接受完整的图像,没有掩码选项,所以我对如何继续有点迷失。有没有人对如何找到特定轮廓中像素值的总和有任何建议?

3 个答案:

答案 0 :(得分:5)

首先获取所有轮廓。使用此信息创建二进制图像,其中白色部分是轮廓的轮廓和区域。对两个图像执行AND操作。结果将是黑色背景上的轮廓和区域。然后只是对该图像中的所有像素求和。

答案 1 :(得分:3)

如果我理解正确,你想要总结一个轮廓内的灰色图像的所有像素强度。如果是这样,我想到的方法是在空白图像上绘制轮廓并填充它,这样就可以使自己成为一个蒙版。之后,为了优化过程,您还可以使用以下方法计算轮廓的边界矩形:

CvRect cvBoundingRect(CvArr* points, int update=0 );

在此之后,您可以使用以下内容制作中间图像:

void cvAddS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL);

使用值0,从轮廓获得的掩码和设置之前作为ROI的边界矩形。

在此之后,得到的图像的总和会更快一些。

答案 2 :(得分:0)

要分别访问轮廓点,请遵循代码

vector<vector<Point> > contours;
...
printf("\n Contours pixels \n");
for(int a=0; a< contours.size(); a++)
{  
   printf("\nThe contour NO = %d  size = %d \n",a, contours[a].size() );
   for( int b = 0; b < contours[a].size();  b++ )  
   {  
       printf(" [%d, %d] ",contours[a][b].x, contours[a][b].y ); 
   }
}