详解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比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
python中set()函数简介及实例解析
Jan 09 Python
Python数据分析之双色球中蓝红球分析统计示例
Feb 03 Python
基于Python3.6+splinter实现自动抢火车票
Sep 25 Python
如何通过python画loss曲线的方法
Jun 26 Python
深入了解Django View(视图系统)
Jul 23 Python
Python获取一个用户名的组ID过程解析
Sep 03 Python
python线程安全及多进程多线程实现方法详解
Sep 27 Python
python的time模块和datetime模块实例解析
Nov 29 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
Python爬虫基础讲解之请求
May 13 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Python+OpenCV实现在图像上绘制矩形
Matplotlib绘制条形图的方法你知道吗
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 #Python
python的netCDF4批量处理NC格式文件的操作方法
Python&Matlab实现灰狼优化算法的示例代码
Python学习之时间包使用教程详解
Mar 21 #Python
You might like
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
2013/11/26 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
JavaScript中实现Map的示例代码
2015/09/09 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
微信小程序返回多级页面的实现方法
2017/10/27 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
layui表格数据重载
2019/07/27 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
Python生成密码库功能示例
2017/05/23 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
python leetcode 字符串相乘实例详解
2018/09/03 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
浅谈keras中loss与val_loss的关系
2020/06/22 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公式)
2020/03/18 HTML / CSS
abstract class和interface有什么区别?
2012/01/03 面试题
乳制品整治工作方案
2014/05/29 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android