6

画像をグレースケールに変換してからぼかして処理した後、次のパラメーターを使用してハフ円変換を適用しようとしています。

  • CV_HOUGH_GRADIENT
  • dp = 1
  • 最小距離 = 1
  • param_1 = 70
  • param_2 = 100
  • 最小半径 = 0
  • 最大半径 = 0

これは、私が試した多くの画像の 1 つです: http://i.stack.imgur.com/JGRiM.jpg

しかし、パラメータを緩和しても、アルゴリズムはボールを認識できません。

(GIMPで作成した円の画像で試してみるとうまくいきました)

4

2 に答える 2

9

私はkrzychに同意します。私はそれを楽に動作させました:

cv::Mat img,img2;
std::vector<cv::Vec3f> circles;
img = cv::imread("JGRiM.jpg",1);
cv::bilateralFilter(img, img2, 15, 1000, 1000);
cv::cvtColor(img2, img2,CV_BGR2GRAY);
cv::HoughCircles(img2, circles, CV_HOUGH_GRADIENT, 1,300,50, 10);
cv::circle(img2,cv::Point(circles[0][0],circles[0][1]),circles[0][2],cv::Scalar(126),2);
cv::imshow("test",img2);

cv::waitKey(0);
cv::imwrite("test.jpg",img2);
return 0;

ここに画像の説明を入力

幸運を :)

于 2012-06-30T19:47:18.043 に答える
0

まず、画像の Canny 出力を確認してください。この Canny の出力から、param_2 が非常に小さいボールと、画像上の多くの偽の円を検出できます。(たとえば、param_2 = 10 を使用し、ボールの中心を指定して偽の円を排除すると機能します)

ハフ サークル トランスフォームを支援してみてください。タスクは、ボールを他の要素から分離することです。画像の問題は線です。たとえば、色を使用してボールをセグメント化することができます。

于 2012-06-30T19:37:50.730 に答える