目前我正在使用scikit-image作为在python中处理我的图像的方法。但经过一些测试后,我发现scikit-image不适用于具有高分辨率的图像。我尝试使用分辨率为3024 x 4032的图像,但会导致MemoryError错误。这发生在scikit-image提供的多种不同方法上。
我发现如果我将图像缩小到较低分辨率的方式,它确实有效。我想知道最大允许分辨率,以便我可以缩小我的图像,而不会失去太多的质量。我可以检查分辨率是否过大。
答案 0 :(得分:1)
我找到了问题的真正原因。它不是分辨率,而是scikit-image,它将图像的数据类型更改为浮点数,这使得它对于内存堆栈来说太大了。
解决此问题的一种方法是使用数据类型uint8将图像转换为numpy数组。像这样:
from PIL import Image
import numpy as np
from skimage.color import rgb2gray
im = Image.open("test.jpg")
pix = np.array(im, dtype=np.uint8)
img = rgb2gray(pix)
将其转换为numpy数组后,您可以将其用于scikit-image提供的任何操作
答案 1 :(得分:0)
您的解决方法很好,但我会这样做:
from skimage import io
from skimage import img_as_ubyte
img = img_as_ubyte(io.imread('test.jpg', as_grey=True))