【发布时间】:2013-05-13 18:04:54
【问题描述】:
我想从二值图像中获得圆形的质心,但输出给出的质心不止一个。 我正在使用来自 opencv 网络教程文档中关于图像时刻的代码并进行了一些修改。 仅供参考,我正在使用 c++ API OpenCV。
输出是:
我希望,文本输出可能会从 3 个轮廓中给出 3 个质心,但实际是 7 个轮廓(contours[0],...,contours[6])。
质心是哪一个?或者,圆形的轮廓区域是哪一个?
然后我修改了代码,去除了一些轮廓(因为真实的图片很噪点,我只想得到一些特定的轮廓,圆形,所以我必须去除其他的轮廓,比如线条和字符)使用:
contours.erase()
我只想从 100 到 500 之间的区域轮廓获取质心。
但是,输出变得奇怪了..
质心就像从它们的轮廓飞到任何地方。
然后,仍然有来自 5 个轮廓的 5 个质心 (contours[0],...,contours[4])。
我必须做什么?我只想获得圆形的质心(高于数字 3)。 我真的需要你的建议。太感谢了! :D
*对不起我的英语不好..
【问题讨论】:
-
嗨,也许你可以制作一个非常简单的单形二进制图像并尝试对其进行编码。此外,这似乎是一个简单的问题,但如果不查看您的代码就很难为您提供帮助...您是否想要 1)找到圆形的形状和 2)找到质心?
-
@QuentinGeissmann 感谢您的评论:D 对于第一张图片,我使用的是 code。对于第二张图片,我用 put
if ( contourArea(contours[i], false) < 100 || contourArea(contours[i], false) > 500) {contours.erase(contours.begin()+i); }修改了代码。 -
老实说,是的,我想找到圆形的形状并获得质心。你有什么建议吗? :D
-
您是否尝试过使用霍夫变换来检测圆圈?
-
@Zaphod 感谢您的评论。 :) 我有,但它不起作用,因为这是手绘圆圈,所以它看起来像圆圈......
标签: c++ opencv image-processing contour centroid