我已经从一张图片中提取了轮廓,想要专门处理轮廓中的像素。我需要找到轮廓中像素值的总和(而不是面积)。OpenCV只支持矩形形状的ROI,所以我不知道该怎么做。cvSum也只接受完整的图像,并没有掩膜选项,所以我有点迷失如何继续。是否有人有关于如何找到特定轮廓中像素值总和的建议?
我已经从一张图片中提取了轮廓,想要专门处理轮廓中的像素。我需要找到轮廓中像素值的总和(而不是面积)。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 );
}
}