我正在尝试打开RGB图片,将其转换为灰度,然后将其表示为从0到1缩放的浮动列表。最后,我想将其再次转换回图像。但是,在下面的代码中,我的转换过程中的某些内容失败,因为img.show()
(原始图像)正确显示,img2.show()
显示全黑图片。我错过了什么?
import numpy as np
from PIL import Image
ocr_img_path = "./ocr-test.jpg"
# Open image, convert to grayscale
img = Image.open(ocr_img_path).convert("L")
# Convert to list
img_data = img.getdata()
img_as_list = np.asarray(img_data, dtype=float) / 255
img_as_list = img_as_list.reshape(img.size)
# Convert back to image
img_mul = img_as_list * 255
img_ints = np.rint(img_mul)
img2 = Image.new("L", img_as_list.shape)
img2.putdata(img_ints.astype(int))
img.show()
img2.show()
答案 0 :(得分:1)
解决方案是在将数组放入图像之前将其展平。我认为PIL将多维数组解释为不同的色带。
img2.putdata(img_ints.astype(int).flatten())
要想更有效地加载图片,请查看
https://blog.eduardovalle.com/2015/08/25/input-images-theano/
但请使用image.tobytes()
(Pillow)代替image.tostring()
(PIL)。