详解Python+OpenCV绘制灰度直方图


Posted in Python onMarch 22, 2022

1.直方图的概念

图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。

图像灰度直方图:

一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征。图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率

归一化直方图:

通常会将纵坐标归一化到[0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数。灰度直方图的计算公式如下:

详解Python+OpenCV绘制灰度直方图

其中,rk是像素的灰度级,nk是具有灰度rk的像素的个数,MN是图像中总的像素个数。

代码

import cv2 as cv
import numpy as np
 
from matplotlib import pyplot as plt
#%matplotlib inline
 
def plot_demo(image):
    plt.hist(image.ravel(), 256, [0, 256]) #image.ravel()#ravel函数功能是将多维数组降为一维数组,统计各个bin的频次,256:bin的个数,[0, 256]:范围
    plt.show("直方图") #和OpenCV中的想要的直方图不同
"""
画灰度图直方图:
绘图都可以调用matplotlib.pyplot库来进行,其中的hist函数可以直接绘制直方图。
plt.hist(arr, bins=50, normed=1, facecolor='green', alpha=0.75)
hist的参数非常多,但常用的就这五个,只有第一个是必须的,后面四个可选
arr: 需要计算直方图的一维数组
bins: 直方图的柱数,可选项,默认为10
normed: 是否将得到的直方图向量归一化。默认为0
range参数表示箱子的下限和上限。即横坐标显示的范围,范围之外的将被舍弃
"""
 
def image_hist(image):
    color = ('blue', 'green', 'red')  #图像三通道
    for i, color in enumerate(color):
        hist = cv.calcHist([image], [i], None, [256], [0, 256]) #绘制各个通道的直方图
        plt.plot(hist, color=color) #定义线的颜色
        plt.xlim([0, 256]) #x轴的范围
    plt.show()
"""
calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) 
images参数表示输入图像,传入时应该用中括号[ ]括起来
channels参数表示传入图像的通道,如果是灰度图像,那就不用说了,只有一个通道,值为0,
如果是彩色图像(有3个通道),那么值为0,1,2,中选择一个,对应着BGR各个通道。这个值也得用[ ]传入。
mask参数表示掩膜图像。如果统计整幅图,那么为None。
主要是如果要统计部分图的直方图,就得构造相应的掩膜来计算。
histSize参数表示灰度级的个数,需要中括号,比如[256]
ranges参数表示像素值的范围,通常[0,256]。此外,假如channels为[0,1],ranges为[0,256,0,180],
则代表0通道范围是0-256,1通道范围0-180。
hist参数表示计算出来的直方图。
"""
 
 
src = cv.imread("F:/images/lena.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
plot_demo(src)
image_hist(src)
cv.waitKey(0)
 
cv.destroyAllWindows()

原图

详解Python+OpenCV绘制灰度直方图

二维直返图

详解Python+OpenCV绘制灰度直方图

RGB直方图

详解Python+OpenCV绘制灰度直方图

到此这篇关于Python+OpenCV绘制灰度直方图详解的文章就介绍到这了,更多相关Python OpenCV灰度直方图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python实现windows下模拟按键和鼠标点击的方法
Mar 13 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
Python中多线程的创建及基本调用方法
Jul 08 Python
老生常谈Python基础之字符编码
Jun 14 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
Feb 21 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
python 并发下载器实现方法示例
Nov 22 Python
使用Pytorch来拟合函数方式
Jan 14 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
Dec 08 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Python+OpenCV实现在图像上绘制矩形
Matplotlib绘制条形图的方法你知道吗
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 #Python
python的netCDF4批量处理NC格式文件的操作方法
Python&Matlab实现灰狼优化算法的示例代码
Python学习之时间包使用教程详解
Mar 21 #Python
You might like
PHP教程 基本语法
2009/10/23 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
php的dl函数用法实例
2014/11/06 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
JS+CSS实现表格高亮的方法
2015/08/05 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
浅析Jquery操作select
2016/12/13 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
Vue通过配置WebSocket并实现群聊功能
2019/12/31 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
Python处理XML格式数据的方法详解
2017/03/21 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
解决pycharm修改代码后第一次运行不生效的问题
2021/02/06 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
怎样写好自荐信和推荐信
2013/12/26 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
市场部岗位职责范本
2015/04/15 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python