有没有人知道可以用来旋转非常大的图像的python库?我需要确保图像使用相同的颜色,并且没有插值,即我必须使用最近邻旋转。
图片格式为tiff
。我正在使用NVIDIA DGX来处理它,这台服务器可容纳512 GB的系统内存。
OPENCV
我尝试使用opencv:
M = cv2.getRotationMatrix2D((w/2,h/2),angle,1)
im_rgb_rot = cv2.warpAffine(im_rgb,M,(w,h),flags=cv2.INTER_NEAREST)
似乎在轮换后im_rgb_rot
变成一个由全零组成的空白图像。
SciPy的
此外,我尝试使用scipy.ndimage.interpolation.rotate
和scipy.misc.imrotate
并在一个小的测试图像上,但似乎旋转不会给我直边,如下所示。我应该注意opencv给出了直边。
这个代码是:
scipy.ndimage.interpolation.rotate(im_test, 40, reshape=False, mode='nearest')
PIL
最后,我不能使用PIL,因为它不支持如此大的图像。
答案 0 :(得分:0)
pyvips可以使用一点点内存快速处理大图像。
要将大图像旋转20度,您可以写:
import pyvips
x = pyvips.Image.new_from_file("M7_KM-1.tif")
x = x.rotate(20, interpolate=pyvips.Interpolate.new("nearest"))
x.write_to_file("x.tif", compression="jpeg", tile=True)
其中M7_KM-1.tif
是65k x 65k像素平铺JPG压缩的TIFF图像。在我的桌面PC上(四核,8线程i7加一块SSD),我看到了:
$ /usr/bin/time -f %M:%e python3 rot.py
1066960:54.06
这是一个超过1GB的内存峰值和57秒的实时时间。