【问题标题】:How to stablize the circle from video stream using opencv?如何使用opencv从视频流中稳定圆圈?
【发布时间】:2013-06-22 18:43:34
【问题描述】:

几天前我已经开始使用 OpenCV,我的目标是检测一个圆及其中心,我使用了霍夫变换,我使用的是分辨率为 640x480 的网络摄像头,
它可以工作,但是圆不断改变它的位置,为了更好地解释它我在youtube上发布了一个屏幕截图https://www.youtube.com/watch?v=6EGePHkGrok
这是代码http://pastebin.com/zRG4Yfzy,是的,我知道它有点乱。
首先显示完整的视频,当相机稳定时我按 ESC,然后在 250x250 的 ROI 上开始处理。
我添加了一些轨迹栏来更改霍夫变换和模糊量的参数,更改模糊量并不能解决问题
如何稳定圈子?此外,相机不会移动,因此不需要跟踪。 还是我应该采用一种全新的方法来做到这一点?
根据我的理解,我需要应用某种过滤器。
物体有许多圆形轮廓,但都具有相同的中心,因此任何圆形轮廓都被检测到它的精细。

PS:我不是图像处理专家,我从各种网站和书籍中修补了代码

【问题讨论】:

    标签: c++ opencv hough-transform


    【解决方案1】:

    众所周知,霍夫变换容易出错。

    对于您的情况,您可能会在图像中找到轮廓并通过它们的圆度对其进行过滤。

    1-灰度

    2- 低通滤波器(高斯模糊)

    3-canny边缘检测

    4- 找到轮廓并列出它们的区域。

    5- 在你的轮廓上绘制最小的封闭圆。

    6-选择最接近轮廓区域的最小包围圆区域的轮廓。

    7- 使用moments F3 类型“质心”找到轮廓的质心

    【讨论】:

    • 哇..感谢它的工作比霍夫圈好得多,这是结果youtube.com/watch?v=jYx-snPt3aI,不过它需要一些调整..谢谢:)
    • Np,作为改进,您可能希望使用 opencv 的blobdetector class;而不是步骤 3-7 :) 我最近使用了这个类,它比蛮力尝试更快,并且您可以应用多种过滤。
    • 我刚看了测试。好的,正如我在这里看到的,你得到的轮廓不够“圆形”。那是因为您的预处理步骤 (1-2-3) 可能不是最好的。尝试在精明之后获得好看的轮廓。对于您的情况,我建议您在 canny 之前应用二进制阈值。您将在轮廓列表中获得一个大方形轮廓。选择最大的轮廓并直接找到它的中心,忽略步骤 4-5-6。因为正如我刚刚注意到的那样,它对你来说很重要。
    • 当然,我会尝试这两种方法,你也可以指点我关于 simpleblobdetector 类的教程或示例代码。
    • here 是。
    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多