2017-02-10 16 views
0

グレースケール画像と同じサイズとハードエッジのブロブを持つ単純な画像です。以下のコードでこれらのサークルが見つからないのはなぜですか?OpenCV3円検出 - シンプルな円を見つける方法(明らかな解決法が見つからない)

ret,thresh1 = cv2.threshold(img,180,250,cv2.THRESH_BINARY) 
thresh1 = cv2.blur(thresh1,(15,15)) 
circles = cv2.HoughCircles(thresh1,cv2.HOUGH_GRADIENT, 2, np.shape(thresh1)[0]/8, param1=200, param2=10) 
if circles is not None: 
    plt.imshow(np.flipud(thresh1), origin='lower', cmap='bone') 
    circles = np.uint16(np.around(circles)) 
for i in circles[0,:]: 
    currentAxis = plt.gca() 
    currentAxis.add_patch(Circle((i[0] , i[1]), i[2],fill=False,color='red')) 
    currentAxis.add_patch(Circle((i[0] , i[1]), 8,fill=True,color='green')) 
plt.show() 

Simple Blobs Not Detected

私が得た出力はこれです:私はPARAM1およびPARAM2を微調整しようとした

Detection Not Correct

。いずれにせよ私は誤検出(これ以上)または何もせずに終わるでしょうか?最小距離パラメータは、イメージの幅の1/8に任意の値としてのみ設定されます。

助けを借りると非常に役に立ちます。

+0

私はあなたのプロットが逆さまかもしれないと思いますか?まだすべてのサークルを見つけることはできませんが、間違ったことを修正しようとするチューニングであまりにも多くの演奏をしたことがありますか? –

+0

ありがとう - 良いスポット。私は明らかにドットとコードブラインドを消しました;-) – user3182080

+0

はい、画像を反転し、原点を下に設定しました - そのラインを削除し、以下のパラメータを使用してください。フリップされたオプションと元のオプションは、このプロジェクトの今後の作業です。 'コード' 円= cv2.HoughCircles(THRESH1、cv2.HOUGH_GRADIENT、1.2、minDist = 10、PARAM1 = 200、PARAM2 = 50、minRadius = 0、maxRadius = 100) 'コード' うまく仕事をしていません。 – user3182080

答えて

1

イメージが反転(np.flipud)され、原点が下に設定されました。これはこのプロジェクトの次の段階の一部です。このコードは正常に動作します。

ret,thresh1 = cv2.threshold(img,180,250,cv2.THRESH_BINARY) 
thresh1 = cv2.blur(thresh1,(15,15)) 
circles = cv2.HoughCircles(thresh1,cv2.HOUGH_GRADIENT, 1.2, minDist = 10, param1=200, param2=50, minRadius = 0, maxRadius = 100) 
if circles is not None: 
    plt.imshow((thresh1), cmap='bone') 
    circles = np.uint16(np.around(circles)) 
for i in circles[0,:]: 
    currentAxis = plt.gca() 
    currentAxis.add_patch(Circle((i[0] , i[1]), i[2],fill=False,color='red')) 
    currentAxis.add_patch(Circle((i[0] , i[1]), 8,fill=True,color='green')) 
plt.show() 

次を生成します。助けを enter image description here

おかげで;-)

関連する問題