我需要获取每个像素亮度的像素值(0-255)

时间:2019-02-13 19:25:23

标签: python python-imaging-library

说明:

我正在使用python 2.7,并且安装了PIL,pip,pip-9.0.1-py2.7.egg-info和Pillow-4.1.1-py2.7.egg-info软件包

我正在尝试让python分析图像并输出像素0-255及其相关的像素值,最好以直方图或列表的形式。

寻找结果:

0 5

1 6

2 8

3 7

...

...

...

尝试:

我尝试卸载pil,失败 我已经安装了Image软件包 在卸载pil之前,我无法安装Pillow 所有这些都是在Python命令行上完成的

代码尝试1:

from PIL import Image, ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
Image.open('C:\\Users\\tsamimi\\Documents\\BasilIce\\FreqVal\\06.953_UTC-clear basil ice.jpg').load()

im = Image.open('C:\\Users\\tsamimi\\Documents\\BasilIce\\FreqVal\\06.953_UTC-clear basil ice.jpg', 'r')

pix_val = list(im.getdata())

pix_val_flat = [x for sets in pix_val for x in sets]

代码尝试2:

from PIL import Image, ImageFile

ImageFile.LOAD_TRUNCATED_IMAGES = True

Image.open('C:\\Users\\abbot\\Documents\\BasilIce\\FreqVal\\06.953_UTC-clear basil ice.jpg').load()

im = Image.open('C:\\Users\\abbot\\Documents\\BasilIce\\FreqVal\\06.953_UTC-clear basil ice.jpg', 'r')

width, height = im.size

pixel_values = list(im.getdata())

两个代码1,2的输出:Process finished with exit code 0

结果去哪里了?缺少缩进吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我终于找到了您想要的东西-这是一个直方图!幸运的是,这很简单,所以从这幅漫画开始:

enter image description here

#!/usr/bin/env python3

from PIL import Image

# Load image as greyscale and calculate histogram
im = Image.open('cartoon.jpg').convert('L')
h = im.histogram()

# Print histogram
for idx, val in enumerate(h):
    print(idx,val)

示例输出

0 41513
1 2362
2 1323
3 1057
4 889
5 780
6 887
7 454
...
...
249 44
250 65
251 119
252 179
253 275
254 246
255 20

请注意,如果您想要RGB图像的直方图,请将第三行更改为:

im = Image.open('cartoon.jpg')

然后您将获得768个值的打印内容,前256个是红色部分,然后下一个256个是绿色部分,最后256个是蓝色部分。