处理轮廓中的像素(OpenCV)
Dealing with pixels in contours (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 );
}
}
相关文章:
- OpenCV 像素访问点与 at() - 不同的值
- OpenCV-如何将vale添加到图像一部分的所有像素
- 访问和更改基于另一个图像的像素颜色-opencv c++
- 在OpenCV中设置像素值(奇怪的结果)
- OpenCV 访问像素的颜色值
- 如何在OpenCV Cuda(GpuMat)中访问像素
- 如何使用 openCV 更改图像每个像素的颜色
- 如何在灰色区域增长明亮像素?OpenCV C++
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- 为什么OpenCV返回像素强度的奇怪值
- 遍历区域并在 OpenCV 中获取平均像素值
- 如何使用opencv在不丢失像素的情况下对图像进行去扭曲
- opencv::Mat,从原始数据中获取像素值
- 在OpenCV中像素化实现
- 在 OpenCV 和 C++ 中查找距轮廓中心最近的黑色像素
- OpenCv,Android:无法编辑转换为HLS色彩空间的相机帧像素
- 如何在opencv C++中访问特定的超像素
- OpenCV从2D像素获取3D坐标
- OpenCV像素操作有时不起作用
- OpenCV 像素化算法