PIL打开图片和转换的问题

4
PIL的Image.open.convert(L)给我一个奇怪的结果:
   from PIL import Image

   test_img = Image.open('test.jpg').convert('L')

   imshow(test_img)

   show()
  1. 它旋转了图像吗?
  2. 它没有将其转换为L吗?

为什么会这样(如果您有想法)?


我不明白为什么你的代码要旋转图像。转换会影响像素值,但它并不会改变图像本身。这种情况在你测试的每张图片上都发生了吗? - Vinayak Kolagi
你尝试旋转的图片可能有奇怪的EXIF数据:https://github.com/kylefox/python-image-orientation-patch - girasquid
@user1573642 如果您无法发送图像进行演示,则提供指向演示问题的图像的链接。这样,声誉更高的其他用户可能会编辑您的问题,并在问题中放置该图像 :) 随时通知我您希望放入问题的图像,我会尝试帮助您。 - Pshemo
2个回答

3

由于Imagepylab之间存在原点不一致,导致您的图像被旋转了。

如果您使用此片段,图像将不会倒置。

import pylab as pl
import Image

im = Image.open('test.jpg').convert('L')
pl.imshow(im, origin='lower')
pl.show()

然而,图像将不会以黑白显示。要实现这一点,您需要指定一个灰度色彩映射表:
import pylab as pl
import Image
import matplotlib.cm as cm

im = Image.open('test.jpg').convert('L')
pl.imshow(im, origin='lower', cmap=cm.Greys_r)
pl.show()

Et voilà!


2
旋转问题是因为 PIL 和 matplotlib 使用不同的约定。如果您执行 test_img.show(),它不会旋转图片。 或者,您可以在使用 matplotlib 显示之前将图像转换为 numpy 数组:
imshow(np.asarray(test_img))

关于.convert('L')方法,对我来说它可行:

test_img = Image.open('test.jpg').convert('L')
print test_img.mode
# 'L'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接