移动圆检测

时间:2015-03-09 11:29:00

标签: c++ opencv

我试图使用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);

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

但如果圈子移动得更快,那就变得无法察觉了。 http://i.imgur.com/GqiiwKH.jpg

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

1 个答案:

答案 0 :(得分:0)

你可以在找到canny之前使用bilateralFilter,这可以稍微改善检测的性能,因为它有助于保持边缘更清晰。

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