2

私は opencv と Java を使用して画像上の円を見つけています。これまでのところ、以下の画像があります。私はハフを使用して、次のようなコードで円を見つけています:

    Imgproc.medianBlur(result, result, 3);
    Imgproc.medianBlur(result, result, 3);
    Imgproc.medianBlur(result, result, 3);
    Mat circles = new Mat();
    Imgproc.HoughCircles(result, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 1, 200, 100, 30, 40);
    System.out.println(circles.dump());

しかし、ぼかしの有無にかかわらず、結果として空のマットが得られます。このコードを修正するにはどうすればよいですか?

ここに画像の説明を入力

編集: こんにちは!

おかげさまで今の写真になりました。私はこれらのパラメータを使用しています:

Imgproc.HoughCircles(result, circles, Imgproc.CV_HOUGH_GRADIENT, 1, 20, 50, 10, 10, 40);

検出前にまだ medianBlur を使用しています。

残っている唯一の問題は、なぜこれらの小さな円を検出するのかということです。キャニー検出の結果を添付しました。円がかなり見えると思います。

ここに画像の説明を入力 ここに画像の説明を入力

4

3 に答える 3

2

まず第一に、circles構造はあるべきではありませんがcv::Mat、あるべきstd::vector<cv::Vec3f>です。それが、結果が得られない理由だと思います..詳細については、HoughCirclesのドキュメントを参照してください..

値を 5 分間いじってみると、次のような出発点があります。

ここに画像の説明を入力

私が使用したパラメータは、

cv::medianBlur(test_Circle, test_Circle, 7);
std::vector<cv::Vec3f> circles; // <- not that "circles" is not cv::Mat
cv::HoughCircles(test_Circle, circles, CV_HOUGH_GRADIENT, 1, 1, 300, 10, 10, 50);

値を少しいじると、より明確な結果を得ることができます。

PS - 私は C++ ユーザーなので、すべての構造体をその形式で配置することをお許しください。ロジックを Java に簡単に拡張できます。:)

于 2013-11-14T19:28:36.630 に答える