Python OpenCV - 透视转换问题

时间:2017-11-10 20:18:26

标签: python opencv homography

我正在编写一个脚本来处理图像并提取PDF417 2D条形码,然后将其解码。我正在提取ROI而没有任何问题,但是当我尝试使用cv2.warpPerspective更正透视图时,结果并不像预期的那样。

以下是提取的条形码,红点是检测到的角落: Original

这是结果图像: Warped

这是我用于转换的代码(这些值由脚本找到,但对于之前的图像如下):

box_or = np.float32([[23, 30],[395, 23],[26, 2141],[389, 2142]])
box_fix = np.float32([[0,0],[415,0],[0,2159],[415,2159]])
M = cv2.getPerspectiveTransform(box_or,box_fix)
warped = cv2.warpPerspective(img,M,(cols,rows))

我已经检查过了,我发现代码没有任何问题,但转换肯定是错误的。提取的ROI中的透视失真量最小,但可能会影响解码过程。

那么,有没有办法摆脱透视失真?难道我做错了什么?这是一个已知的bug还是什么?非常欢迎任何帮助。

BTW,我正在使用OpenCV 3.3.0

1 个答案:

答案 0 :(得分:2)

似乎您将图像坐标指定为(y,x)。我知道OpenCV中坐标的解释会有所不同。 在homography example code中,它们至少以在此代码段中使用“ h”和“ w”为基础,将坐标表示为(x,y):

h,w = img1.shape
pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
dst = cv2.perspectiveTransform(pts,M)

因此,请尝试将getPerspectiveTransform和warpPerspective的坐标都设置为(x,y)。