我正在尝试拉直这封信,但我不确定如何使用边界矩形来做到这一点。

这是我到目前为止所拥有的:

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()

结果如下:
python - 使用边界矩形获得旋转角度不起作用(OpenCV/Python)-LMLPHP

我查看了 OpenCV 文档以使其正常工作,但无法使其正常工作。我正在尝试最终编写一个循环,该循环将尝试 4 个角度以查看它是否是直的。

最佳答案

cv2.minAreaRect(cnt)

返回一个 Box2D 对象,该对象已经存储了旋转信息。
(x,y),(width,height),theta

其中 theta 是 Box2D 对象的水平边和第一边所包围的角度,在您的示例中,是内部轮廓的较短边。

这取决于你想要达到的最终结果,但如果你只是想旋转这个特定的例子,你可以这样做:
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))

关于python - 使用边界矩形获得旋转角度不起作用(OpenCV/Python),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36293335/

10-16 18:46