2024-05-18 18:57:40 发布
网友
我正在尝试编辑此图像:
然而,当我跑的时候
im = Image.open(filename) im.show()
它输出相同大小的完全纯白色图像。为什么Image.open()不起作用?我怎样才能解决这个问题是否有其他库可用于获取非255像素值(正确的像素阵列)?
Image.open()
谢谢, 文尼
可以使用openCV库加载图像
import cv2 img = cv2.imread('image file') plt.show(img)
Image.open实际上似乎工作正常,getpixel、putpixel和save也一样,因此您仍然可以加载、编辑和保存图像
Image.open
getpixel
putpixel
save
问题似乎在于show保存图像的临时文件是纯白色的,因此图像查看器仅显示白色图像。原始图像为16位灰度,但临时图像保存为8位灰度
show
我目前的理论是,在show中实际上可能存在一个缺陷,16位灰度图像通过将所有像素值限制为255而“转换”为8位灰度,导致一个全白色的临时图像,因为原始图像中的所有像素值都在30000以上
如果在调用show之前将像素设置为低于255的值,则该像素显示正确。因此,假设您想要增强图片中的对比度,您可以打开图片,将值映射到0到255的范围(例如,使用numpy),然后使用show
numpy
from PIL import Image import numpy as np arr = np.array(Image.open("Rt5Ov.png")) arr = (arr - arr.min()) * 255 // (arr.max() - arr.min()) img = Image.fromarray(arr.astype("uint8")) img.show()
但是正如前面所说的,由于save似乎可以正常工作,您也可以保留16位灰度深度,只save编辑图像,而不是使用show
可以使用openCV库加载图像
Image.open
实际上似乎工作正常,getpixel
、putpixel
和save
也一样,因此您仍然可以加载、编辑和保存图像问题似乎在于
show
保存图像的临时文件是纯白色的,因此图像查看器仅显示白色图像。原始图像为16位灰度,但临时图像保存为8位灰度我目前的理论是,在
show
中实际上可能存在一个缺陷,16位灰度图像通过将所有像素值限制为255而“转换”为8位灰度,导致一个全白色的临时图像,因为原始图像中的所有像素值都在30000以上如果在调用
show
之前将像素设置为低于255的值,则该像素显示正确。因此,假设您想要增强图片中的对比度,您可以打开图片,将值映射到0到255的范围(例如,使用numpy
),然后使用show
但是正如前面所说的,由于
save
似乎可以正常工作,您也可以保留16位灰度深度,只save
编辑图像,而不是使用show
相关问题 更多 >
编程相关推荐