什么是histogram?
- 它可以给出图像的密度分布的总体概念,它的x轴是像素值(0到255)y轴是对应的像素在图像里的数量。
- 看histogram你可以得到对比度,亮度,密度分布等直观信息。今天的所有图像处理工具都提供了histogram属性,
1. 直方图
直方图
OpenCV代码: cv2.calcHist(image, channels, mask, histSize, ranges)
- images: 原图像图像格式为uint8或float32,当传入函数时,应用中括号[]来表示,例如[img]
- channels: 同样用[]来表示,如果图像时灰度图,那么它的值就是[0],如果是彩色图像,那么传入的参数可以是0,1,2,它们分别对应着RGB
- [0],[1]和[2]来分别计算蓝色,绿色和红色通道的histogram。
- mask: 掩模图像,如果想统计整幅图中的直方图就把它写为None,如果想统计某一部分的直方图,就制作一个掩模图像并使用它。
- histSize:BIN的数目,也应该用中括号表示 (需要用户方括号传入),对于全刻度,我们传入[256].
- ranges:像素值范围常为[0,256] (RANGE,一般来说是[0,256])
I
import cv2
img = cv2.imread("D:/WeChat.picture/cat.jpg",0) # 0 表示转为 灰度图
hist = cv2.calcHist([img] , [0] , None ,[256] ,[0,256]) #None 表示 没掩盖 对整个图进行处理
hist.shape # 结果显示出可能有256 个 取值 , 1 表示 2维 统计出现个数
(256, 1)
# opencv 是 (B G R)的形式 , matplotlib 是 (R B G) 的形式 可用 ravel 转化
import matplotlib.pyplot as plt
plt.hist(img.ravel() , 256) # plt.hist(img.ravel() , 16) 将其 别分为 16 区间
plt.show()