c++ - 形状检测 - 使用 OpenCV 进行轮廓逼近

标签 c++ image-processing opencv

我正在编写用于形状检测的小型应用程序。我首先需要做的是找到图像上最重要的形状。我从一些预处理开始,包括将图像转换为灰度、阈值和边缘检测。这些操作之前和之后的图像如下所示

之前

enter image description here

之后

enter image description here

所以你可以看到主要形状是可见的(但它有点分散),还有一些噪音(小树等)。我需要做的是以某种方式仅提取最重要的形状(最大的形状) - 在这种情况下它是一座塔。 我想做的是在opencv中使用轮廓查找功能,然后以某种方式将找到的轮廓与多边形近似。然后我会(不知何故)计算面积并只选择最大的面积。 到目前为止,我设法(仅)使用

找到轮廓
cvFindContours(crated,g_storage,&contours);

我知道有一个

cvApproxPoly

function ,但是我无法获得有关此函数结果的任何有用信息。 有人可以告诉我是否可以计算轮廓面积或用多边形近似轮廓。也许您对如何仅提取最重要的形状有更好的想法?

最佳答案

您不必在这里进行边缘检测。只需对二进制图像进行阈值处理,然后在其上找到 blob (cvFindContours)。您可以在每个返回的 CvSeq 上使用 cvContourArea 来查找其区域。

关于c++ - 形状检测 - 使用 OpenCV 进行轮廓逼近,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6322117/

相关文章:

c++ - 解释指针的这种情况

c++ - 什么时候需要 const volatile 对象?

c++ - 如何克服C++对嵌入式系统缺乏工具支持的问题?

c# - 位图图像的“每样本位数”、“每像素样本数”和“每像素字节数”之间有什么区别?

arrays - cv.fillPoly生成零数组,不读取输入

python - 用于分类的图像转换器

c# - 非托管导出,将字符串数组从 C++ 传递到 C#

Android:如何使用 onDraw 方法模糊圆的边缘?

python - 高效的OCR微调

node.js - 根据原始图像大小进行 GraphicsMagick 裁剪(重新使用读取流)