在Python中使用warpAffine进行OpenCV旋转会导致错误的边框

时间:2017-08-02 16:51:55

标签: python-3.x opencv image-rotation

查看此Python代码:

degrees = 90
center  = (24, 24)

img     = np.ones((48,48,3)) * 255
mat     = cv2.getRotationMatrix2D(center, degrees, 1.0)
img     = cv2.warpAffine(img, mat, (48, 48))

我的期望是创建一个3通道,完全饱和的白色方块并存储在img中。之后,它将旋转90度。将白色方块旋转90度应该会产生......难以区分的白色方块。但是当我:

plt.imshow(img)
plt.show(img)

我看到一个错误的黑色边框:

What gives

有没有办法让warpAffine按预期工作,即在没有错误边框的情况下旋转图像?我尝试了以下修改无济于事:

center  = (23, 23)
center  = (24, 23)
center  = (23, 24)
center  = (25, 25)
center  = (24, 25)
center  = (25, 24)

1 个答案:

答案 0 :(得分:2)

你应该使用图像的确切中心而不是下一个最接近的东西。使用(24,24)旋转略微偏离中心。

由于getRotationMatrix2D接受Point2f,您应该将中心作为(23.5,23.5)传递,因为它是0 and 47之间的中间点。