2016-03-29 33 views
2

この文字をまっすぐにしようとしていますが、境界矩形を使用する方法がわかりません。境界矩形を使用して回転角度が機能しない(OpenCV/Python)

import cv2 
import numpy as np 

img = cv2.imread('rtes.jpg',0) 

ret,thresh = cv2.threshold(img,127,255,0) 
ret,contours,hierarchy = cv2.findContours(thresh, 1, 2) 

cnt = contours[0] 
M = cv2.moments(cnt) 
print M 
cx = int(M['m10']/M['m00']) 
cy = int(M['m01']/M['m00']) 
#cnt = contours[2] 
#cv2.drawContours(img, [cnt], 0, (0,255,0), 3) 
rect = cv2.minAreaRect(cnt) 
box = cv2.boxPoints(rect) 
box = np.int0(box) 
cv2.drawContours(img,[box],0,(255,0,0),2) 
cv2.imshow('img',img) 

k = cv2.waitKey(0) 
if k == 27:   # wait for ESC key to exit 
    cv2.destroyAllWindows() 

を、ここでの結果です:

は、ここで私がこれまで持っているものだ、私はそれが働いて得るためにOpenCVのドキュメントに見えたが、それは動作させることができませんでしたしました enter image description here

。私はそれがまっすぐであるかどうかを見るために4つの角度を試みるループを最終的に書くことを試みている。

答えて

3
cv2.minAreaRect(cnt) 

は、すでに回転情報を格納しているBox2Dオブジェクトを返します。シータは、あなたの例では、内側輪郭の短辺水平及びBOX2Dオブジェクトの第一の側面によって囲ま角度で

(x,y),(width,height),theta 

それはあなたが最終的な結果として達成しようとしているものに依存しますが、あなただけのこの特定の例を回転させるようにしようとしているならば、あなたは、このようにそれを行うことができます:

rows, cols = img.shape 
rect = cv2.minAreaRect(cnt) 
center = rect[0] 
angle = rect[2] 
rot = cv2.getRotationMatrix2D(center, angle-90, 1) 
print(rot) 
img = cv2.warpAffine(img, rot, (rows,cols)) 
関連する問題