PIL.Image.open 与 cv2.imread 读取的图片在像素点上不一致

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PIL.Image.open 与 cv2.imread 读取的图片在像素点上不一致相关的知识,希望对你有一定的参考价值。

参考技术A PIL.Image.open 与 cv2.imread 读取的图片在像素点上不一致,具体原因不明,但是从两者图片相减之后得到图片来看,似乎是 PIL.Image.open 或 cv2.imread 中至少有一个在读取图片时,产生了问题。

不过也有可能是下面的原因:

opencv的cv2.imwrite()函数写图像之后,再次读取,其像素值不相等的bug: https://blog.csdn.net/oukohou/article/details/82378552

另得到的经验是,模型在推断阶段的数据处理操作跟训练阶段的都要尽量一致,包括在推理阶段 使用  PIL.Image.open,而在训练阶段 cv2.imread 来读取图片,同时无论操作是否一致,都要对输入、输出做严格的一致性检查,以避免出现意料之外的错误。

python中用Pillow库进行图片处理

PIL:PIL.Image.open

 

PIL即Python Imaging Library,也即为我们所称的Pillow,是一个很流行的图像库,它比opencv更为轻巧,正因如此,它深受大众的喜爱。

一、图片读取

PIL读进来的图像是一个对象,而不是我们所熟知的numpy 矩阵。

from PIL import Image
img = Image.open(\'呆头鸟.jpg\')
print(img.format) 
print(img.size) #注意,省略了通道 (w,h)
print(img.mode) #L为灰度图,RGB为真彩色,RGBA为加了透明通道
img.show() # 显示图片

显示效果:

 

二、灰度的调整

from PIL import Image
img = Image.open(\'呆头鸟.jpg\')
gray = Image.open(\'呆头鸟.jpg\').convert(\'L\')
gray.show()

 

 

以上是关于PIL.Image.open 与 cv2.imread 读取的图片在像素点上不一致的主要内容,如果未能解决你的问题,请参考以下文章

python中用Pillow库进行图片处理

图像旋转任意角度+python

Opencv 图像处理:图像通道直方图与色彩空间

游戏开发小技TexturePacker生成的图集逆向切分成精灵小图(json | python | PIL | TextureUnPacker | 逆向 | 切图)

游戏开发小技TexturePacker生成的图集逆向切分成精灵小图(json | python | PIL | TextureUnPacker | 逆向 | 切图)

游戏开发小技TexturePacker生成的图集逆向切分成精灵小图(json | python | PIL | TextureUnPacker | 逆向 | 切图)