我正在编写一个脚本来处理图像并提取PDF417 2D条形码,然后将其解码。我正在提取ROI而没有任何问题,但是当我尝试使用cv2.warpPerspective
更正透视图时,结果并不像预期的那样。
这是我用于转换的代码(这些值由脚本找到,但对于之前的图像如下):
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
答案 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)。