OpenCV+python:直方图的概念及绘制(Histogram)
1,直方图的概念
图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。
图像灰度直方图:
一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征。图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。图像的灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像素的个数:其中,横坐标是灰度级,纵坐标是该灰度级出现的频率
归一化直方图:
通常会将纵坐标归一化到[0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数。灰度直方图的计算公式如下:
其中,rk是像素的灰度级,nk是具有灰度rk的像素的个数,MN是图像中总的像素个数。
2,直方图的绘制
import cv2 as cv
import numpy as npfrom matplotlib import pyplot as plt
#%matplotlib inlinedef 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: 直方图的柱数,可选项,默认为10normed: 是否将得到的直方图向量归一化。默认为0range参数表示箱子的下限和上限。即横坐标显示的范围,范围之外的将被舍弃
"""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()
运行结果:
OpenCV+python:直方图的概念及绘制(Histogram)相关推荐
- OpenCV中直方图的计算和绘制
OpenCV中直方图的计算和绘制 主要记录一下几个关键的API: cvRound(输入一个浮点数 );//返回一个整型数,取整的方法为四舍五入 split(输入多通道图像,数组或者vector变量. ...
- python opencv 直方图均衡_深入理解OpenCV+Python直方图均衡化
原标题:深入理解OpenCV+Python直方图均衡化 正文 直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法. 基本思想:把原始图的直方图变换为均匀分 布的形式,这样就增加了像素灰度 ...
- opencv python matplotlib.pyplot.hist() 如何绘制灰度直方图,如何根据灰度直方图确定最优二值化值
什么是灰度直方图? 图像直方图(histogram)是图像的统计学特征,常用于了解图像的基本特征以便分析.不过图像的直方图不具有空间特征. 图像的灰度直方图(histogram),就是将图像转化成灰度 ...
- opencv python 直方图反向投影_python OpenCV学习笔记直方图反向投影的实现
本文介绍了python OpenCV学习笔记直方图反向投影的实现,分享给大家,具体如下: 它用于图像分割或寻找图像中感兴趣的对象.简单地说,它创建一个与我们的输入图像相同大小(但单通道)的图像,其中每 ...
- 使用Python,Opencv进行二维直方图的计算及绘制
使用Python,Opencv进行二维直方图的计算及绘制 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python,Opencv进行二维直方图的计算及绘制(分别用Opencv和Numpy计算 ...
- 如何用python绘制灰度直方图_Python Opencv任意形状目标检测并绘制框图实例
Python Opencv检测并绘制框图 opencv 进行任意形状目标识别,供大家参考,具体内容如下 工作中有一次需要在简单的图上进行目标识别,目标的形状不固定,并且存在一定程度上的噪声影响,但是噪 ...
- python绘制灰度图片直方图-opencv+python 统计及绘制直方图
灰度直方图概括了图像的灰度级信息,简单的来说就是每个灰度级图像中的像素个数以及占有率,创建直方图无外乎两个步骤,统计直方图数据,再用绘图库绘制直方图. 统计直方图数据 首先要稍微理解一些与函数相关的术 ...
- Python+OpenCV:直方图反向投影(Histogram Backprojection)
Python+OpenCV:直方图反向投影(Histogram Backprojection) Algorithm in Numpy 1. First we need to calculate the ...
- Python+OpenCV:直方图均衡化(Histogram Equalization)
Python+OpenCV:直方图均衡化(Histogram Equalization) ####################################################### ...
最新文章
- 言论丨马库斯回应14大质疑,重申深度学习怀疑论
- sql 整改措施 注入_SQL注入的漏洞及解决方案
- 几款浏览器JavaScript调试工具
- Collectors.toSet()
- 计算机绘图实训任务书,autocad模块化实训任务书-2011.11
- 中国海洋大学c语言程序设计,中国海洋大学C语言级期末卷.pptx
- Aop 是面向切面编程,
- 用pano2vr创建全景图
- PS-第二天-图像合成与渐变工具
- Flutter基础Widget之按钮(RaisedButton、FlatButton、OutlineButton,IconButton)
- TI-DSPC6657、C6678多核开发OpenMP示例
- Qt 官方例子 Callout Example
- HashMap为什么是2倍扩容
- miniui的学习笔记(四)
- linux实验实训报告,linux实验实训报告.doc
- win人工智能助手——小爱同学uwp版 (win10专属)
- iFIXIT认为 HTC One M8 是近年最难维修的手机之一
- python怎样设置列表翻译_翻译:《实用的Python编程》01_05_Lists
- 一款令人印象深刻的FCPX插件:3D Photo Animator (3D照片动画制作器)
- MacOs 12 微信闪退
热门文章
- Ubuntu 安装 Etcd
- 高斯回归过程应用例子
- pytorchviz visdom 可视化 pytorch
- super(Student,self).__init__()初始化的是什么东西?
- LeetCode简单题之两栋颜色不同且距离最远的房子
- LeetCode简单题之数字转换为十六进制数
- 第一个SpringBoot程序(详细解析Grounp、Artifact等项目信息含义)
- 外部NORFlash是第一个以硬件为基础的信任
- CentOS7安装Python3详细步骤与Python2共用方法
- 【CV】Python下载安装及环境变量配置教程