我对OpenCV和Xcode完全陌生。

我正在尝试通过使用颜色和霍夫圆检测来找到一些交通标志。到目前为止,这是我所做的:

cv::cvtColor(cvImage, cvGrayImage, CV_RGB2HSV);
cv::Mat cvThresh;
cv::inRange(cvGrayImage,cv::Scalar(170,160,10),cv::Scalar(180,255,256),cvThresh);
//cv::dilate(cvThresh,cvThresh, cv::Mat(),cv::Point(-1,-1),2,1,1);
cv::GaussianBlur(cvThresh, cvThresh, cv::Size(9,9), 2,2);

cv::vector<cv::Vec3f> circles;
cv::HoughCircles(cvThresh, circles, CV_HOUGH_GRADIENT, 1,cvThresh.rows/4,200,30);
// NSLog(@"Circles: %ld", circles.size());

for(size_t i = 0; i < circles.size(); i++)
{
    cv::Point center((cvRound(circles[i][0]), cvRound(circles[i][2])));
    int radius = cvRound(circles[i][2]);
    cv::circle(cvImage, center, 3, cv::Scalar(255,0,0), -1, 8, 0);
    cv::circle(cvImage, center, radius, cv::Scalar(0,0,255),3,8,0);
}

这是我的结果,但是我不知道了。
任何想法或建议或示例代码将不胜感激。

最佳答案

如果您知道要查找的尺寸圆圈,则最好相应地设置min_radiusmax_radius。否则,它将返回任何大小的循环。

这样,参数1和2不会影响准确性,而会影响可靠性。

  • 参数1将设置灵敏度;圆的边缘需要多强。太高了,它什么也检测不到,太低了,它将发现太多混乱。
  • 参数2将设置需要多少个边点来声明已找到一个圆。同样,太高将检测不到任何东西,太低将宣布任何东西为一个圆。参数2的理想值将与圆的周长有关。
  • 10-08 18:03