2017-08-02 221 views
0

看看这个Python代码:OpenCV的旋转与warpAffine 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) 
+0

在旋转之前显示它时,它看起来像什么?清洁?此外,如果您给它一个奇数的像素尺寸,并且实际上可以选取中心像素作为中心,会发生什么情况? –

+0

旋转之前,它是预期的干净的正方形。不幸的是,我无法改变图像尺寸,因为在上面的虚拟示例中它是一个白色图像 - 但我的实际数据集是CT扫描,我试图维护尺寸信息。 –

+1

你试过旋转约24.5,24.5吗?它看起来像getRotationMatrix2D接受一个Point2f,所以它应该采用浮点数 –

回答

2

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

既然getRotationMatrix2D接受一个Point2f,你应该通过中心作为(23.5,23.5),因为它是0 and 47之间的中间点。