我正在使用 OpenCV 和 c++。二值化后我有黑白图像。当我只有一个点 (x,y) 的坐标属于该对象时,如何计算对象的面积?
问问题
8501 次
3 回答
2
由于它是二进制图像,因此您可以轻松获取blobs。获得斑点后,您可以轻松计算斑点面积。您可以使用cvBlobsLib来获取 blob。OpenCV 没有集成 cvBlobsLib。你可以自己做。但是 OpenCV 具有轮廓功能。您可以使用 findContours 获取斑点/轮廓,然后获取该区域。OpenCV - 查找轮廓
您将找到有关时刻、huMoments、轮廓等的信息。使用时刻,您可以创建自己的 blob,它还将帮助您获取 blob 区域。
这是一个用于机器视觉的开源框架,它使用 OpenCV 的 Python 绑定 - SimpleCV
他们使用轮廓和矩实现了完整的 blob 功能。你可以看看。
它是用 Python 编写的,但您可以将其移植到 C++ 并使用 blob。
于 2012-09-07T14:15:22.727 回答
1
该算法非常简单,应该如下:
- 找到图像上的所有轮廓。
- 循环遍历所有轮廓并检查点是否在轮廓内。
- 如果找到轮廓,则计算它的面积。
于 2012-09-08T08:44:28.160 回答
0
您必须编写某种区域增长算法,从您的起点开始,逐步添加相同颜色的相邻像素。
一种懒惰(而且慢得多)的方法是使用 cv::floodFill 函数,将形状中的像素设置为特定颜色,然后计算图像中具有这种特定颜色的像素。
于 2012-09-07T15:45:13.710 回答