基于Python的OpenCV基础入门——图像直方图
- 直方图
- 图像直方图
- 图像直方图代码以及实现效果
直方图
直方图是一种用于描述图像亮度分布的统计工具。它将图像的像素亮度值按照不同的亮度等级进行计数,并以直方图的形式呈现出来。图像直方图可以显示图像中每个亮度级别的像素数量,从而用于分析图像的亮度分布情况。
图像直方图
hist = cv2.calcHist([img], [channels], Mask, [histSize], ranges)
参数:
[img]: 必须用方括号括起来,表示被计算的图像,可以是多幅。
[channels]: 用于计算直方图的通道,这里使用灰度图计算直方图,所以就直接使用第一个通道,多幅图像相当于多通道;
Mask: 与原图维度相同,被计算的区域,1 计算,0 不计算,不使用该参数用 None。
[histSize]: 表示这个直方图分成多少份(即多少个直方柱的数量)。
ranges: 表示直方图中各个像素的值,[0.0, 256.0]表示直方图能表示像素值从 0.0 到 256 的像素。
图像直方图代码以及实现效果
import cv2
import matplotlib.pyplot as pltimg = cv2.imread("img/cat.jpg") img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) #将BGR 格式转换为RGB 格式 # 绘制图像直方图
plt.subplot(2,1,1) # 2 * 1布局的 上面
hist1=plt.hist(img.ravel(), 256, [0, 256]) #numpy 的ravel 函数功能是将多维数组降为一维数组 # 画三通道图像的折线图
plt.subplot(2,1,2)
color = ('b', 'g', 'r') #这里画笔颜色的值可以为大写或小写或只写首字母或大小写混合
for i , color in enumerate(color): hist = cv2.calcHist([img], [i], None, [256], [0, 256]) #计算直方图 plt.plot(hist, color) plt.xlim([0, 256]) plt.show()
图像直方图的实现效果如下: