多语言展示
当前在线:934今日阅读:176今日分享:34

怎么绘制直方图?

给出一张RGB图片,它有三个通道组成,分别是红色通道、绿色通道、蓝色通道。而根据颜色深度的不同,可以分为0到255个不同的数值。直方图,就是对某个通道的某一种深度的像素值的像素数目的统计,并画成图像。
工具/原料
1

电脑

2

python3+

方法/步骤
1

这里采用的模块是cv2,默认的通道顺序是BGR:import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('b.png')img*[1,0,0]

2

获取图片的第一个通道的亮度(也就是像素值)的统计:import cv2import numpy as npfrom matplotlib import pyplot as pltimg = cv2.imread('b.png')h = cv2.calcHist([img],[0],None,[256],[0,256])print(h)这里,h是一个255*1的列表。

3

画出这个通道的直方图。由于这个通道是蓝色通道,所以这里把直方图画成蓝色的:plt.plot(h,color = 'b')plt.xlim([0,256])plt.show()

4

绿色通道的直方图:h = cv2.calcHist([img],[1],None,[256],[0,256])plt.plot(h,color = 'g')plt.xlim([0,256])plt.show()

5

红色通道的直方图:h = cv2.calcHist([img],[2],None,[256],[0,256])plt.plot(h,color = 'r')plt.xlim([0,256])plt.show()

6

把三个通道的直方图合并到一起,就是一个完整的直方图:c = ('b','g','r')for i,col in enumerate(c):    h = cv2.calcHist([img],[i],None,[256],[0,256])    plt.plot(h,color = col)    plt.xlim([0,256])plt.show()

注意事项

注意,每一个通道的直方图下面的面积是一样的。

推荐信息