5

我的目标:

  1. 将图像读入 PIL 格式。
  2. 将其转换为灰度。
  3. 使用 pylab 绘制图像。

这是我正在使用的代码:

from PIL import Image
from pylab import *
import numpy as np

inputImage='C:\Test\Test1.jpg'
##outputImage='C:\Test\Output\Test1.jpg'

pilImage=Image.open(inputImage)
pilImage.draft('L',(500,500))
imageArray= np.asarray(pilImage)

imshow(imageArray)

##pilImage.save(outputImage)

axis('off')

show()

我的问题:图像的显示就像颜色反转一样。

这是原始图像

这是它在 Python 窗口中的显示方式

但是我知道图像正在转换为灰度,因为当我将其写入磁盘时,它显示为灰度图像。(正如我所料)。

我觉得问题出在numpy转换的某个地方。

我刚刚开始使用 Python 进行图像处理编程。提示和指南也将不胜感激。

4

2 回答 2

14

您想覆盖默认颜色图:

imshow(imageArray, cmap="Greys_r")

这是有关在 matplotlib 中绘制图像和伪色的页面

于 2013-01-01T15:41:23.910 回答
2

这会产生一个黑白图像:

pilImage=Image.open(inputImage)
pilImage = pilImage.convert('1')   #this convert to black&white
pilImage.draft('L',(500,500))

pilImage.save('outfile.png')

convert方法文档

convert

im.convert(mode) => image

Returns a converted copy of an image.
When translating from a palette image, this translates pixels through the palette.
If mode is omitted, a mode is chosen so that all information in the image and the palette can be represented without a palette.

When from a colour image to black and white, the library uses the ITU-R 601-2 luma transform:

    L = R * 299/1000 + G * 587/1000 + B * 114/1000
When converting to a bilevel image (mode "1"), the source image is first converted to black and white.
Resulting values larger than 127 are then set to white, and the image is dithered.
To use other thresholds, use the point method.
于 2013-01-01T16:43:39.317 回答