skimage最大图像分辨率(memoryerror)

时间:2018-05-01 12:45:53

标签: python image-processing scikit-image

目前我正在使用scikit-image作为在python中处理我的图像的方法。但经过一些测试后,我发现scikit-image不适用于具有高分辨率的图像。我尝试使用分辨率为3024 x 4032的图像,但会导致MemoryError错误。这发生在scikit-image提供的多种不同方法上。

我发现如果我将图像缩小到较低分辨率的方式,它确实有效。我想知道最大允许分辨率,以便我可以缩小我的图像,而不会失去太多的质量。我可以检查分辨率是否过大。

2 个答案:

答案 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))