OpenCV在轮廓边界内获取黑色像素

Posted

技术标签:

【中文标题】OpenCV在轮廓边界内获取黑色像素【英文标题】:OpenCV get black pixels within contour boundary 【发布时间】:2012-07-04 11:26:42 【问题描述】:

我目前正在尝试检索存在于轮廓边界内的所有黑色像素。我对轮廓边界不感兴趣,而是对位于边界内并构成实际图像的黑色像素感兴趣。如果我能得到图像的实际坐标,那就太好了。

我曾尝试使用带有掩码的 copyTo 方法,但我相信我没有设置正确的参数。同时,我也尝试使用 Core.fillPoly ,它只用命令中指定的颜色填充整个轮廓区域,并且对获取像素信息没有帮助。有人可以在这里指导我吗?我正在使用 OpenCV 2.3.1 开发 android 2.2。

【问题讨论】:

【参考方案1】:

有一组像素落在轮廓边界内。还有另一组黑色像素。你想找到这两个集合的交集,也就是在边界内并且颜色都是黑色的像素集合。

为此,我会:

    将轮廓绘制为填充形状,黑底白字(在其自己的图像中),使其成为蒙版。 您可以使用cv::drawContourscv::fillPoly

    过滤图像中的黑色像素作为另一个蒙版。 您可以将cv::thresholdTHRESH_BINARY_INV 一起使用,并且阈值为零。

    使用bitwise_and 或简单的& 运算符(如matResult = mat1 & mat2;)查找相交集

结果是一个与您的图像大小相同的矩阵,其非零值仅适用于满足您在轮廓内和图像中黑色标准的像素。您可以通过循环遍历此矩阵并测试非零值来获取各个坐标。

【讨论】:

谢谢布赖恩,看起来很有希望。我会试一试,然后告诉你。 Hey Brain,这是我已经实现的一段代码,目前在 android 模拟器上测试它似乎正在运行。但是,当我尝试将最终矩阵转换为一组向量时,应用程序崩溃了。我正在转换它,以便我可以查看 Mat 拥有的非零像素。请指教。它在这一行失败 - Converters.Mat_to_vector_Point(finalResult, points); 我已经用这个命令获得了最终的垫子 - 'Core.bitwise_and(mGrayC4,contourRegion,finalResult);` 我假设您已经初始化了points 列表?您可以尝试检查中间矩阵以检查它们是否符合您的期望。否则我很难在没有看到更多代码的情况下知道问题出在哪里。

以上是关于OpenCV在轮廓边界内获取黑色像素的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中使用 OpenCV 访问轮廓边界内的像素值

使用opencv获取(内边缘)轮廓像素

Opencv检测边界和ROI掩码

OpenCV与EmguCV中的图像轮廓提取

OpenCV+python轮廓

18KW15/1-OpenCV入门-初识轮廓