《数字图像处理基础与应用》朱虹 编著
题目一:读入一幅灰度图像求图像的灰度直方图
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('G:/实验室学习资料/数字图像处理/lab1/1_2.bmp').convert('L'))
plt.figure("lena")
arr=img.flatten()
# arr: 需要计算直方图的一维数组, bins: 直方图的柱数,可选项,默认为10, normed: 是否将得到的直方图向量归一化,默认为1. facecolor: 直方图颜色, alpha: 透明度
# n: 直方图向量,是否归一化由参数设定; bins: 返回各个bin的区间范围; patches: 返回每个bin里面包含的数据,是一个list
n,bins,patches=plt.hist(arr,bins=256,normed=1,facecolor='green',alpha=0.75)
plt.show()
运行效果图如下:
题目二:读入一幅彩色图像,求其R、G、B三个通道的灰度直方图
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
src=Image.open('G:/实验室学习资料/数字图像处理/lab1/1_1.jpg')
#把彩色图像分割成红绿蓝三种颜色
r,g,b=src.split()
plt.figure("Lab_2")
arr1=np.array(r).flatten()
plt.hist(arr1,bins=256,normed=1,facecolor='red',edgecolor='red')
arr2=np.array(g).flatten()
plt.hist(arr2,bins=256,normed=1,facecolor='green',edgecolor='green')
arr3=np.array(b).flatten()
plt.hist(arr3,bins=256,normed=1,facecolor='blue',edgecolor='blue')
plt.show()
运行效果如下所示:
用python将矩阵存储为bmp图像:
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
#读入数据arr,此处为手动设置
arr = np.array([[100,76,0,132,7,7],[28,7,7,7,7,243],[28,243,7,100,7,28],[100,7,7,0,7,100],[100,0,7,7,132,0],[132,132,132,100,7,100]])
#将元素类型更改为'uint8'
arr=np.array(arr,dtype='uint8')
arr=Image.fromarray(arr)
#第一个参数为存储的地址和名称,第二个参数为存储的图片类型
arr.save('test.bmp','bmp')
plt.hist(arr,bins=256,normed=1,facecolor='green',alpha=0.75)
plt.show()