2016-12-27 28 views
0

次の図は、私が何を望むかを示しています。pythonでopencvを使ってイメージをデスキューする方法は?

イメージには、イメージデスキューの基本となる4つの参照矩形が含まれています。 Imageには、テキスト、円、矩形などの他の情報が含まれているとします。今、4つの矩形に基づいてイメージをまっすぐにするスクリプトを作成したいと思います。だから私はそれを傾けた後にいくつかの情報を抽出することができます。 私はOpenCVのpythonを使用しています、私はこれを達成する方法を教えてください。 OpenCV Pythonの例としていくつかのコードを見せてください。それ以降はenter image description here

+0

次いでwarpPerspective'toそれをデスキュー '使用基準矩形から得られたマッチングポイントと' findHomography'機能、OpenCVの者を使用してホモグラフィ行列を探します。 –

+0

@Optimus 1072それは本当にガドの解決ですが、ホモグラフィは、ソースからデスティネーションのような固定点です。私の場合、4つの参照矩形は画像が変化すると固定されません。画像テンプレートは類似の矩形を持ちますが、固定小数点はありません。だから私はいくつかのコード/アプローチは、それに基づいてデスキューする必要があります。 –

+0

私はまだあなたの質問を正しく理解していないと思います。目標エリアを見つけるためのアルゴリズムが必要ですか?そうでなければホモグラフィは4つの四角形(ターゲット)の4つの矩形を見つけることができるので動作します。そうでなければ、傾き補正についての問題ではありません。 –

答えて

1

私はそれを最終的に解決しました。

contours, hierarchy = cv2.findContours(img_dilate.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 

points=[] 
i=0 
for contour in contours: 
    area = cv2.contourArea(contour) 
    if area > 10 and area < 800: 
     x,y,w,h = cv2.boundingRect(contour) 
     cv2.rectangle(img_dilate,(x,y),(x+w,y+h),(0,255,0),2) 
     center = (int(x),int(y)) 
     position = (center[0], center[1]) 
     points.append(position) 
     print position,i 
     text_color = (255,0,255) 
     cv2.putText(resized,str(i+1), position, cv2.FONT_HERSHEY_SIMPLEX, 0.5, text_color, 2) 
     i=i+1 
pnts = np.array(points) 
rect = cv2.minAreaRect(pnts) 
box = cv2.cv.BoxPoints(rect) 
box = np.int0(box) 
cv2.drawContours(resized,[box],0,(0,255,0),2) 

root_mat = cv2.getRotationMatrix2D(rect[0], angle , 1) 
rotated = cv2.warpAffine(resized, root_mat, dim, flags=cv2.INTER_CUBIC) 
cv2.getRectSubPix(rotated, dim, center) 
関連する問題