OpenCV 灰度直方图
创作时间:
作者:
@小白创作中心
OpenCV 灰度直方图
引用
CSDN
1.
https://m.blog.csdn.net/weixin_42291376/article/details/140753218
灰度直方图是图像处理中一个重要的概念,它能够直观地展示图像中像素强度的分布情况。本文将从直方图的定义、意义和特征出发,详细介绍如何使用OpenCV计算和显示灰度直方图,并通过代码示例帮助读者更好地理解这一概念。
一 直方图的定义,意义和特征
1 定义
在统计学中,直方图是一种对数据分布情况的图形表示,是一种二维统计图表,他的两个坐标分别是统计样本(图像、视频帧)和样本的某种属性(亮度,像素值,梯度,方向,色彩等等任何特征)
2 意义
(1)直方图是图像中像素强度分布的图形表达方式。
(2)直方图统计了每一个强度值所具有的像素个数。
3 特征
(1)直方图不再表征任何的图像纹理信息,而是对图像像素的统计。
(2)由于同一物体无论是旋转还是平移在图像中都具有相同的灰度值,因此直方图具有平移不变性、缩放不变性等优点。
4 方法和参数
cv2.calcHist(images, channels, mask, histSize, ranges[hist[, accumulate]])
(1)images : 整型类型(uint8和float32)的原图(list形式显示)。
(2)channels : 通道的索引,例如:[0]代表灰度图片,[0],[1],[2]代表多通道。
(3)mask : 计算图片指定区域的直方图。如果mask为none,那么计算整张图。
(4)histSize( bins ) : 每个色调值(范围: 0 ~ 255)对应的像素数量/频率。[这256个值中的每一个都被称为bin,它的取值有8,16,32,64,128,256。在OpenCV中,用histSize表示bins。]
(5)range : 强度值的范围,[0, 256]。
import cv2
import matplotlib.pyplot as plt
import numpy as np
#显示图片
def show_image(image,title,pos):
image_RGB=image[:,:,::-1]#shape:(height,width,channel)
#显示标题
plt.title(title)
plt.subplot(2,3,pos)
plt.imshow(image_RGB)
#显示图片的灰度直方图
def show_histogram(hist,title,pos,color):
#显示标题
plt.title(title)
plt.subplot(2,3,pos)#定位图片
plt.xlabel("Bins")#横轴信息
plt.ylabel("Pixels")#纵轴信息
plt.xlim([0,256])#范围
plt.plot(hist,color=color)#绘制直方图
#主函数
def main():
#创建画布
plt.figure(figsize=(15,6))#画图大小
plt.suptitle("Gray Image Histogram",fontsize=14,fontweight='bold')#设置标题
img=cv2.imread("./2037551.jpg")
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
hist_img=cv2.calcHist([img_gray],[0],None,[256],[0,256])
#展示灰度直方图
#灰度图转换成BGR格式图片
img_BGR=cv2.cvtColor(img_gray,cv2.COLOR_BGRA2BGR)
show_image(img_BGR,"BGR image",1)
show_histogram(hist_img,"gray image histogram",4,"m")
M=np.ones(img_gray.shape,np.uint8)*50#构建矩阵
added_img = cv2.add (img_gray, M)
add_img_hist = cv2.calcHist ([added_img], [0], None, [256], [0, 256]) # 计算直方图
added_img_BGR = cv2.cvtColor (added_img, cv2.COLOR_GRAY2BGR)
show_image (added_img_BGR, "added image", 2)
show_histogram (add_img_hist, "added image hist", 5, "m")
# 11 对图片中的每个像素值减去50个像素
subtract_img = cv2.subtract (img_gray, M)
subtract_img_hist = cv2.calcHist ([subtract_img], [0], None, [256], [0, 256]) # 计算直方图
subtract_img_BGR = cv2.cvtColor (subtract_img, cv2.COLOR_GRAY2BGR)
show_image (subtract_img_BGR, "subtracted image", 3)
show_histogram (subtract_img_hist, "subtracted image hist", 6, "m")
plt.show ( )
if __name__ == '__main__':
main ( )
热门推荐
西瓜如何保存,教你用小红书上的独家方法保持鲜甜!
即将实施!2025年日本JCT消费税新规,会对卖家造成哪些影响?
需办理食品经营许可证的行业汇总
三种常见神经网络模型(DNN、CNN、RNN)的区别与联系
河南职业技术学院:凝心聚力建“双高” 砥砺奋进育人才
防治膝痛,从“引膝痛导引术”开始
CS史诗级大更新:职业哥及社区反应一览
刘盆子:从放牛娃到皇帝的传奇人生及其终结
2025年,政策战略牛市的起点?
三万元打造顶级游戏主机:究极配置全攻略
2025中国科学技术大学研究生招生计划-各专业招生人数是多少
狗狗喂食分量的科学探讨(不同年龄段狗狗的饮食需求与喂食建议)
688和300开头的股票区别是什么?详解两者2025年最新差异
揭秘:将军代表的十二生肖之谜,究竟是哪个动物?
年轻人的省钱妙招:几块钱角钢打造全屋家具
保单的税优识别码在哪里?一文详解保险购买与管理要点
路肩的重要性及其在交通安全中的关键作用解析
支气管扩张能治好吗?学会这三种方法
被誉为天空立法者人是哪位 原因是
法律意义上的房地产:理解房地产权的属性和限制
王者荣耀S38赛季23位上分英雄确定,嬴政双喜临门,姜子牙成版本黑马
传统文化大放异彩,浦东这个元宵游园会海派韵味十足
实习协议是什么
大型会议策划全攻略:从筹备到执行的每一步
交税交百分之多少:税率解析与法律规定
风湿手关节肿痛怎样热敷
宗教知识:北传佛教是什么意思?
河南职业技术学院就业率及就业前景怎么样
紧箍咒的意义:从《西游记》到人生智慧
《六姊妹》华裔女星邬君梅,用演技证明自己,被误解的刘美心