c++ - OpenCV:防止 HoughCircles 方法使用 Canny 检测

标签 c++ opencv edge-detection object-detection hough-transform

我正在使用 HoughCircles 实时检测球,但在我的灰度图像流上运行 Canny 并没有按预期创建所有边缘。为了解决这个问题,我将 rgb 图像拆分为单独的 channel ,对每个 channel 执行 Canny,然后使用按位或将边缘合并在一起。这工作得很好,但如果我将该边缘图像提供给 HoughCircles,它将再次对边缘图像执行 Canny。有没有办法防止这种情况,或者放弃我正在执行的 rgb split Canny 检测,同时仍然捕捉到所有边缘?

最佳答案

确实! Canny 由 HoughCircles 内部执行并且无法调用 cv::HoughCircles() 并阻止它调用 Canny。

但是,如果您想坚持使用当前的方法,一种替代方法是复制 OpenCV 源代码中可用的 cv::HoughCircles() 的实现,并且修改它以满足您的需要。这将允许您编写自己的 cv::HoughCircles() 版本。

如果您遵循此路径,请务必认识到 OpenCV 的 C++ API 是基于 C API 构建的。这意味着 cv::HoughCircles() 只是 cvHoughCircles() 的包装器,它在 opencv-2.4.7/modules/imgproc/src 中实现/hough.cpp 第 1006 行之后。

看看这个函数(第 1006 行),注意第 1064 行对 icvHoughCirclesGradient() 的调用。这是负责调用 cvCanny() 的函数,这是在第 817 行完成的。

另一种方法,if the ball is single-colored , 可以通过使用 cv::inRange() 来实现 isolate a specific color ,这将提供更快的检测。此外,该主题已在该论坛上进行了广泛讨论。一个非常有趣的话题是:

关于c++ - OpenCV:防止 HoughCircles 方法使用 Canny 检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182439/

相关文章:

c++ - 为什么选择我的自定义操作的 CPU 实现?

python - 检测位于图像opencv侧面的对象

image - 如何在opencv中找到图像中形状的角点?

c++ - 如何在 map 中实现终点?

c++ - 将类回调函数分配给结构?

c++ - 使用 C++/Boost 绕过阻塞输入流

c++ - 如何在没有插值的情况下获得未失真的图像

opencv - OpenCV 中的 getRectSubPix 和 borderInterpolate

有人可以解释一下 cvPtr 的 OpenCV 文档吗?D

algorithm - 无起点图搜索算法