Two*_*ter 0 c# opencv image-processing
我最近才开始使用 OpenCV 和图像处理,所以请耐心等待
灰色轮廓是跟踪算法的结果,我为调试而绘制的,因此您可以忽略它。
我正在跟踪发光的球体,因此很容易调低相机的曝光度,然后过滤掉剩余的周围噪音。所以我必须处理的始终是带有白色圆圈的黑色图像。有时会发出一点点噪音,但通常这不是问题。
请注意,球体安装在平面上,因此当以特定角度保持时,圆的底部可能会被“切断”,但霍夫变换似乎处理得很好。
目前,我使用霍夫变换来获取位置和大小。但是,即使运动很少,它也会在实际圆圈周围抖动很多。在运动时,它有时会完全失去轨道并且无法检测到任何圆圈。
此外,这是在实时 (30fps) 环境中,我必须运行两个 Hough 圆变换,这在 ryzen 7 cpu 上占用了 30% 的 CPU 负载......
我曾尝试使用二值图像(去除圆的“平滑”轮廓),并更改霍夫变换的设置。使用较低的 dp 值,它似乎不那么抖动,但由于需要处理,它不再是实时的。
这基本上是我的代码:
ImageProcessing.ColorFilter(hsvFrame, Frame, tempFrame, ColorProfile, brightness);
ImageProcessing.Erode(Frame, 1);
ImageProcessing.SmoothGaussian(Frame, 7);
/* Args: cannyThreshold, accumulatorThreshold, dp, minDist, minRadius, maxRadius */
var circles = ImageProcessing.HoughCircles(Frame, 80, 1, 3, Frame.Width / 2, 3, 80);
if (circles.Length > 0)
...
Run Code Online (Sandbox Code Playgroud)
这些ImageProcessing调用只是 OpenCV 框架 (EmguCV) 的包装器
是否有更好的、更少的紧张和更少的性能需求的方式或算法来检测这些类型的(如我所见)非常简单的圆圈?我在互联网上没有找到与这些圈子相匹配的答案。感谢您的任何帮助!
我很想看到人们通过跳到边缘检测和/或霍夫变换来破坏好的信息的频率。
在这种特殊情况下,您有一个可爱的斑点,可以在几分之一毫秒内检测到,并且质心将产生良好的准确性。半径可以仅从该区域获得。
你报告说,在运动的情况下,霍夫会变得紧张;这可能是因为运动模糊或帧交错(取决于相机)。质心应该对这些影响更加稳健。
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |