假设如果我们正在处理图像,有没有办法访问轮廓内的像素?
我已经使用函数 findContours()
找到了轮廓,甚至找到了时刻,但我找不到轮廓内的像素。
欢迎任何建议!
谢谢!
原文由 Bloklo 发布,翻译遵循 CC BY-SA 4.0 许可协议
在轮廓轮廓的边界框内的所有像素上使用 pointPolygonTest http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=pointpolygontest#pointpolygontest 。
原文由 Amitay Nachmani 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答3.3k 阅读
正如@Miki 已经提到的,您可以使用 connectedComponents 来执行标记。然后像@Amitay Nachmani 建议的那样遍历对象的边界框。但是您可以检查当前位置的值是否与当前标签匹配,而不是使用 pointPolygonTest 这是一个小例子:
编辑:
由于您使用的是 OpenCV 2.4,因此有两种方法可以实现相同的结果。首先,您可以使用 findContours 检测斑点,然后将它们(填充)绘制到具有特定颜色作为标签的新图像中(注意您的斑点可能包含孔)然后遍历每个轮廓的边界矩形内的图像并获得带有当前轮廓标签的所有点。如果您只是遍历二值图像内的边界矩形,则会遇到对象与边界矩形重叠的问题。这是代码:
其次,您可以使用 Floodfill 执行您自己的标签。因此,您遍历图像并开始对每个白色像素进行填充,遍历边界矩形并获取具有相同种子颜色的所有点。这是代码:
和
我使用了这张图片:
以下是用于可视化的边界框和轮廓内的点: