2017-06-29 9 views
1

私はpythonを使ってopencvを使っています。 私は、リンクのような異なるサイズの円のトレイを持っています。 https://is.alicdn.com/img/pb/810/421/429/429421810_364.jpg これは実際の画像ではありませんが、上記の画像と非常に似ています。 イメージ内のトレイを検出し、トレイ内のすべての穴(円)の輪郭を見つけなければなりません。画像を撮影するユーザーによってトレイが傾いている可能性があります。 これまで、私はガウスのぼかしと賢いエッジ検出を画像に使用し、ぼかしエッジ検出のギャップを閉じました。これは、Canny Edge検出後の画像です。 After Canny Edge Detection これは形態学後の画像です。 After morphology 次に、findcontoursを使用し、4つの頂点を持つ最大の輪郭を見つけようとしました。理想的にはトレイそのものです。 輪郭検出は、左の垂直境界線と上部の水平境界線を識別することしかできません。トレイの4辺を認識できません。opencv pythonでゲームボード上で矩形を検出

これは、これまでの私のコードです:

cv2.cannyのパラメータをチューニング
import numpy as np 
import cv2 
import matplotlib.pyplot as plt 

image = cv2.imread("img.jpg") 
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
image = cv2.GaussianBlur(image, (3, 3), 0) 
image_canny = cv2.Canny(image, 30, 200) 
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7)) 
gaps_closed = cv2.morphologyEx(image_canny, cv2.MORPH_CLOSE, kernel) 
_, contours, _= cv2.findContours(gaps_closed.copy(), cv2.RETR_TREE, 
cv2.CHAIN_APPROX_SIMPLE) 
contours = sorted(contours, key = cv2.contourArea, reverse = True) 
[:5] 
Cnt = None 
for c in contours: 
    peri = cv2.arcLength(c, True) 
    approx = cv2.approxPolyDP(c, 0.04 * peri, True) 

    if len(approx) == 4: 
     Cnt = approx 
     break 

cv2.drawContours(image, [Cnt], -1, (0, 255, 0), 4) 
plt.imshow(image) 
plt.show() 
+1

参考になるあなたは、キャニーとモルフォロジー演算後の出力電流を添付することはできますか? – ZdaR

+0

@ ZdaR:画像を追加しました。 – dep234

答えて

0

は、それが簡単にトレイのエッジを検出するために行う必要があります。しかし、HoughLinesは完全なエッジを検出する必要がないので、cv2.HoughLinesを使用する方がトレイを検出する良い方法かもしれません。

0

入力のヒストグラム均等化を実行すると、画像のコントラストが改善されます。これにより、画像内のエッジ検出が改善されます。

画像の穴が小さいように見えますが、形態学的な操作では表示されない場合があります。それは穴を消し去り、あなたはそれらを取り戻すことができないかもしれません。

Opencvにはハフサークル変換の実装があります。以下は、例としてのPythonチュートリアルです:http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_houghcircles/py_houghcircles.html。これを使用すると、問題が解決するはずです。

これが動作しない場合は、あなたの実際の入力画像を投稿すること

関連する問題