详解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执行子进程实现进程间通信的方法
Jun 02 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
mysql 之通过配置文件链接数据库
Aug 12 Python
python删除不需要的python文件方法
Apr 24 Python
matplotlib 输出保存指定尺寸的图片方法
May 24 Python
django 实现电子支付功能的示例代码
Jul 25 Python
Python拼接字符串的7种方法总结
Nov 01 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
python实现对输入的密文加密
Mar 20 Python
Django使用Profile扩展User模块方式
May 14 Python
python如何建立全零数组
Jul 19 Python
pytorch 中nn.Dropout的使用说明
May 20 Python
PYTHON使用Matplotlib去实现各种条形图的绘制
Python+OpenCV实现在图像上绘制矩形
Matplotlib绘制条形图的方法你知道吗
Python的代理类实现,控制访问和修改属性的权限你都了解吗
Mar 21 #Python
python的netCDF4批量处理NC格式文件的操作方法
Python&Matlab实现灰狼优化算法的示例代码
Python学习之时间包使用教程详解
Mar 21 #Python
You might like
如何在PHP中使用Oracle数据库(2)
2006/10/09 PHP
选择PHP作为网站开发语言的原因分享
2012/01/03 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
jQuery事件详解
2017/02/23 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
Python MD5文件生成码
2009/01/12 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
python画图常规设置方式
2020/03/05 Python
django 模版关闭转义方式
2020/05/14 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
车间副主任岗位职责
2013/12/24 职场文书
二年级学生评语大全
2014/04/23 职场文书
文化大革命观后感
2015/06/17 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android