3

我正在使用 OpenCV 和 c++。二值化后我有黑白图像。当我只有一个点 (x,y) 的坐标属于该对象时,如何计算对象的面积?

4

3 回答 3

2

由于它是二进制图像,因此您可以轻松获取blobs。获得斑点后,您可以轻松计算斑点面积。您可以使用cvBlobsLib来获取 blob。OpenCV 没有集成 cvBlobsLib。你可以自己做。但是 OpenCV 具有轮廓功能。您可以使用 findContours 获取斑点/轮廓,然后获取该区域。OpenCV - 查找轮廓

OpenCV - 结构分析和形状描述

您将找到有关时刻、huMoments、轮廓等的信息。使用时刻,您可以创建自己的 blob,它还将帮助您获取 blob 区域。

这是一个用于机器视觉的开源框架,它使用 OpenCV 的 Python 绑定 - SimpleCV

他们使用轮廓和矩实现了完整的 blob 功能。你可以看看。

斑点

BlobMaker

它是用 Python 编写的,但您可以将其移植到 C++ 并使用 blob。

于 2012-09-07T14:15:22.727 回答
1

该算法非常简单,应该如下:

  1. 找到图像上的所有轮廓
  2. 循环遍历所有轮廓并检查点是否在轮廓内
  3. 如果找到轮廓,则计算它的面积
于 2012-09-08T08:44:28.160 回答
0

您必须编写某种区域增长算法,从您的起点开始,逐步添加相同颜色的相邻像素。

一种懒惰(而且慢得多)的方法是使用 cv::floodFill 函数,将形状中的像素设置为特定颜色,然后计算图像中具有这种特定颜色的像素。

于 2012-09-07T15:45:13.710 回答