Value Error: Too many dimensions: 3 > 2
Value Error: Too many dimensions: 3 > 2
我尝试使用 scipy 调整图像大小,在我尝试保存图像之前一切似乎都正常。当我尝试保存图像时出现错误,您可以在标题中看到该错误。下面提供了完整的追溯。
import numpy as np
import scipy.misc
from PIL import Image
image_path = "img0.jpg"
def load_image(img_path):
img = Image.open(img_path)
img.load()
data = np.asarray(img, dtype="int32")
return data
def save_image(npdata, outfilename):
img = Image.fromarray(np.asarray(np.clip(npdata, 0, 255), dtype="uint8"), "L")
img.save(outfilename)
array_image = load_image(image_path)
array_resized_image = scipy.misc.imresize(array_image, (320, 240), interp='nearest', mode=None)
save_image(array_resized_image, "i1.jpg")
错误的完整回溯:
Traceback (most recent call last):
File "D:/Python/Playground/resize image with scipy.py", line 26, in <module>
save_image(array_resized_image, "i1.jpg")
File "D:/Python/Playground/resize image with scipy.py", line 16, in save_image
img = Image.fromarray(np.asarray(np.clip(npdata, 0, 255), dtype="uint8"), "L")
File "C:\Anaconda2\lib\site-packages\PIL\Image.py", line 2154, in fromarray
raise ValueError("Too many dimensions: %d > %d." % (ndim, ndmax))
ValueError: Too many dimensions: 3 > 2.
在执行 fromarray(... 'L') 之前不需要将其转换为二维数组吗?
您可以使用 scipy 函数或将 RGB 乘以因数,实际上更快。像这样
npdata = (npdata[:,:,:3] * [0.2989, 0.5870, 0.1140]).sum(axis=2)
array_resized_image
具有 (320, 240, 3)
的形状 - 三维,因为红色、绿色和蓝色分量以这种方式存储。您可以使用 scipy.misc.imread
和 scipy.misc.imsave
来更轻松地处理文件加载和存储,因此您的示例归结为:
import scipy.misc
image_path = "img0.jpg"
array_image = scipy.misc.imread(image_path)
array_resized_image = scipy.misc.imresize(array_image, (320, 240), interp='nearest', mode=None)
scipy.misc.imsave("i1.jpg", array_resized_image)
我尝试使用 scipy 调整图像大小,在我尝试保存图像之前一切似乎都正常。当我尝试保存图像时出现错误,您可以在标题中看到该错误。下面提供了完整的追溯。
import numpy as np
import scipy.misc
from PIL import Image
image_path = "img0.jpg"
def load_image(img_path):
img = Image.open(img_path)
img.load()
data = np.asarray(img, dtype="int32")
return data
def save_image(npdata, outfilename):
img = Image.fromarray(np.asarray(np.clip(npdata, 0, 255), dtype="uint8"), "L")
img.save(outfilename)
array_image = load_image(image_path)
array_resized_image = scipy.misc.imresize(array_image, (320, 240), interp='nearest', mode=None)
save_image(array_resized_image, "i1.jpg")
错误的完整回溯:
Traceback (most recent call last):
File "D:/Python/Playground/resize image with scipy.py", line 26, in <module>
save_image(array_resized_image, "i1.jpg")
File "D:/Python/Playground/resize image with scipy.py", line 16, in save_image
img = Image.fromarray(np.asarray(np.clip(npdata, 0, 255), dtype="uint8"), "L")
File "C:\Anaconda2\lib\site-packages\PIL\Image.py", line 2154, in fromarray
raise ValueError("Too many dimensions: %d > %d." % (ndim, ndmax))
ValueError: Too many dimensions: 3 > 2.
在执行 fromarray(... 'L') 之前不需要将其转换为二维数组吗?
您可以使用 scipy 函数或将 RGB 乘以因数,实际上更快。像这样
npdata = (npdata[:,:,:3] * [0.2989, 0.5870, 0.1140]).sum(axis=2)
array_resized_image
具有 (320, 240, 3)
的形状 - 三维,因为红色、绿色和蓝色分量以这种方式存储。您可以使用 scipy.misc.imread
和 scipy.misc.imsave
来更轻松地处理文件加载和存储,因此您的示例归结为:
import scipy.misc
image_path = "img0.jpg"
array_image = scipy.misc.imread(image_path)
array_resized_image = scipy.misc.imresize(array_image, (320, 240), interp='nearest', mode=None)
scipy.misc.imsave("i1.jpg", array_resized_image)