移动圆检测

Moving circle detection

本文关键字:检测 移动      更新时间:2023-10-16

我正在尝试使用OpenCV/C++检测移动的圆圈。我的代码:

   m_capture >> imageRGB;
   cv::cvtColor(imageRGB, imgageGray, cv::COLOR_RGB2GRAY);
   cv::Scalar mu;
   cv::Scalar sigma;
   cv::meanStdDev(imgageGray, mu, sigma);
   cv::Mat imageCanny;
   cv::Canny(imgageGray,
             imageCanny,
             mu.val[0] + sigma.val[0],
             mu.val[0] - sigma.val[0]);
   std::vector<std::vector<cv::Point> > contours;
   std::vector<cv::Vec4i> hierarchy;
   cv::findContours(imageCanny, contours, hierarchy,CV_RETR_TREE, CV_CHAIN_APPROX_NONE);

在此之后,我正在检查是否有任何圆圈,并且是正确的圆圈。如果圆不移动或移动缓慢,没关系。https://i.stack.imgur.com/TM4sf.jpg

但是,如果圆圈移动得更快,它就变得无法检测到了。https://i.stack.imgur.com/1axJn.jpg

那么,有人可以给我建议如何以更好的方式检测移动的圆圈吗?上级:我的相机是罗技c920。

您可以在找到精灵之前使用双边过滤器,这可能会略微提高检测性能,因为它有助于保持边缘更清晰。

http://docs.opencv.org/modules/imgproc/doc/filtering.html#void%20bilateralFilter%28InputArray%20src,%20OutputArray%20dst,%20int%20d,%20double%20sigmaColor,%20double%20sigmaSpace,%20int%20borderType%29