2012-02-22 10 views
1

円の中心を検出しようとしています。私はcvHoughCircleでこれをやろうとしています。しかし、私はそれが適切に働くように見えることはできません。opencvでサークルの中心を取得しようとしています

enter image description here

変わることができる唯一のことは、円の大きさです。

私が実行して、円を検出してみてください。

circle = cvHoughCircles(imgThreshold, storage, CV_HOUGH_GRADIENT, 1, 
(double)imgThreshold.height()/20, 200, 20, 0, 0); 

imgThresholdはあなたがここで見ることができ、B/W画像です。画像の解像度は実際には1280 * 1024です。

誰でも私が間違っていることを教えてもらえますか?代わりに数学のビットを使用してこの問題解決することが可能であるcvHoughCircleを使用しての

+0

正確に間違っていますか?コンパイラエラー?間違ったサークル?これを試した後のストレージの内容は何ですか? –

+0

何もありません。空です。それは何も検出しません。しかし、cvHoughCircleを使用しないソリューションが見つかった場合。私は答えのセクションに投稿しました – Ojtwist

答えて

3

 CvMoments moments = new CvMoments(); 

     cvMoments(imgThreshold, moments, 1); 

     double moment10 = cvGetSpatialMoment(moments, 1, 0); 
     double moment01 = cvGetSpatialMoment(moments,0,1); 
     double area = cvGetCentralMoment(moments, 0, 0); 

     int posX = 0; 
     int posY = 0; 

     int lastX = posX; 
     int lastY = posY; 

     posX = (int) (moment10/area); 
     posY = (int) (moment01/area); 

     cvCircle(iplRgbImage, new CvPoint(posX,posY), 3, CvScalar.GREEN, -1, 8, 0); 

ソースを= http://aishack.in/tutorials/tracking-colored-objects-in-opencv/

2

円が完了し、充填され、他の形状によって塞がれていない場合、あなたfindContours()を使用して、輪郭の中心を見つけることができます。

0

ハフ変換は、それが円周辺に属するピクセルを識別することによって円を検出することができる変換に関する。より正確には、周期的な経路に沿って白い画素を含むバイナリ(閾値)画像が与えられると、ハーフサークル変換は円を検出する。したがって、アルゴリズムを供給するための画像はバイナリであり、しきい値を設定する必要がありますが、あなたの例では、塗りつぶされた丸ではなく、エッジフィルタ(Sobelなど)の閾値化された例でなければなりません。

上記の画像に円を「フィッティング」する正しい方法を伝えることはできませんが、接続されたコンポーネントで抽出されたブロブの重心はすばやく進みます。

関連する問題