处理轮廓中的像素(OpenCV)?
我从图像中检索了一个轮廓,并且想专门处理轮廓中的像素。 我需要找到轮廓中像素值的总和(不是区域)。 OpenCV只支持矩形形状的ROI,所以我不知道该怎么做。 cvSum也只接受完整的图像,并没有掩码选项,所以我在如何进行时有点遗憾。 有没有人有任何建议如何找到特定轮廓中的像素值的总和?
首先获取所有轮廓。 使用此信息创建二进制图像,其中白色部分是轮廓的轮廓和区域。 对两幅图像执行AND操作。 结果将是黑色背景上的轮廓和区域。 然后只需对该图像中的所有像素进行求和。
如果我理解正确,你想从轮廓内的灰色图像中总结所有的像素强度。 如果是这样,我想到的方法是在空白图像上绘制轮廓并填充它,这样就可以使自己成为一个面具。 之后,为了优化过程,您还可以使用以下公式计算轮廓的边界矩:
CvRect cvBoundingRect(CvArr* points, int update=0 );
之后,您可以制作一个中间图像:
void cvAddS(const CvArr* src, CvScalar value, CvArr* dst, const CvArr* mask=NULL);
使用值0,从轮廓中获得的掩模并将之前设置为ROI的边界矩形。
在此之后,所得图像的总和会快一点。
要单独访问轮廓点,请遵循代码
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 );
}
}
链接地址: http://www.djcxy.com/p/15865.html