《 Python 计算机视觉编程》学习笔记(一)

练习代码仓库 https://github.com/wolfg1969/Programming-Computer-Vision-with-Python-practice

第一章 基本图像处理

第二节 Matplotlib

直方图

以下代码生成的直方图显示了示例图像中像素值(灰度值,因为转成了灰度图)的分布情况。

from PIL import Image
from pylab import *

im = array(Image.open('images/empire.jpg').convert('L'))
print im.shape, im.dtype  # (800, 569) uint8

figure()
gray()
axis('equal')
axis('off')
imshow(im)

figure()
h = hist(im.flatten(), 128)
print len(h[1]), h[1]

show()

图像尺寸 800x569, flatten 后一共有 455200 个像素。直方图的横轴代表灰度值的范围(0 ~ 255),hist 函数的第二个 bins=128 将 横轴分成了 bins + 1 = 129 个小区间,纵轴代表灰度值在每个区间灰度值范围内的像素个数,即像素灰度值的分布情况。

观察直方图,横轴值为 0 的附近几乎没有 bin 的存在,说明图像里几乎没有纯黑的地方。而最右侧 255 附近的 bins 说明白色像素的存在。

经过了灰度变换 255 -im 后的直方图,正好是镜像的。