【发布时间】:2017-08-02 16:51:55
【问题描述】:
查看此 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)
我看到一个错误的黑色边框:
有什么方法可以让warpAffine 按预期工作,即旋转图像而没有错误的边框?我尝试了以下修改无济于事:
center = (23, 23)
center = (24, 23)
center = (23, 24)
center = (25, 25)
center = (24, 25)
center = (25, 24)
【问题讨论】:
-
在轮换之前展示它会是什么样子?干净的?另外,如果你给它一个奇数的像素尺寸并且实际上可以选择中心像素作为你的中心会发生什么?
-
在旋转之前,它是预期的干净正方形。不幸的是,我无法更改图像尺寸,因为在上面的虚拟示例中它是一张白色图像——但我的实际数据集是 CT 扫描,我试图在其中维护尺寸信息。
-
你试过旋转大约 24.5,24.5 吗?看起来 getRotationMatrix2D 接受 Point2f 所以它应该采用浮点数
-
@EastonBornemeier
(23.5, 23.5)将是中心,索引从 0 到 47(含)。 -
@AlexanderReynolds 很好,这就是我的意思,使用图像的实际中心
标签: python-3.x opencv image-rotation