在python中旋转大图像(85000x85000x3)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中旋转大图像(85000x85000x3)相关的知识,希望对你有一定的参考价值。
有没有人知道可以用来旋转非常大的图像的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,因为它不支持如此大的图像。
答案
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图像。在我的台式电脑(四核,8线程i7加上SSD)上,我看到:
$ /usr/bin/time -f %M:%e python3 rot.py
1066960:54.06
因此,峰值仅超过1GB的内存和57s的实时时间。
以上是关于在python中旋转大图像(85000x85000x3)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Open CV 3 python 3 用鼠标从大图像中裁剪 ROI