Image.open()提供纯白色图像

2024-05-18 18:57:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编辑此图像:

然而,当我跑的时候

im = Image.open(filename)
im.show()

它输出相同大小的完全纯白色图像。为什么Image.open()不起作用?我怎样才能解决这个问题是否有其他库可用于获取非255像素值(正确的像素阵列)?

谢谢, 文尼


Tags: 图像image编辑show像素openfilenameim
2条回答

可以使用openCV库加载图像

import cv2
img = cv2.imread('image file')
plt.show(img)

Image.open实际上似乎工作正常,getpixelputpixelsave也一样,因此您仍然可以加载、编辑和保存图像

问题似乎在于show保存图像的临时文件是纯白色的,因此图像查看器仅显示白色图像。原始图像为16位灰度,但临时图像保存为8位灰度

我目前的理论是,在show中实际上可能存在一个缺陷,16位灰度图像通过将所有像素值限制为255而“转换”为8位灰度,导致一个全白色的临时图像,因为原始图像中的所有像素值都在30000以上

如果在调用show之前将像素设置为低于255的值,则该像素显示正确。因此,假设您想要增强图片中的对比度,您可以打开图片,将值映射到0到255的范围(例如,使用numpy),然后使用show

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

相关问题 更多 >

    热门问题