opencv python统计及绘制直方图的方法


Posted in Python onJanuary 21, 2019

灰度直方图概括了图像的灰度级信息,简单的来说就是每个灰度级图像中的像素个数以及占有率,创建直方图无外乎两个步骤,统计直方图数据,再用绘图库绘制直方图。

统计直方图数据

首先要稍微理解一些与函数相关的术语,方便理解其在python3库中的应用和处理

BINS: 在上面的直方图当中,如果像素值是0到255,则需要256个值来显示直 方图。但是,如果不需要知道每个像素值的像素数目,只想知道两个像素值之间的像素点数目怎么办?例如,想知道像素值在0到15之间的像素点数目,然后是16到31。。。240到255。可以将256个值分成16份,每份计算综合。每个分成的小组就是一个BIN(箱)。在opencv中使用histSize表示BINS。

DIMS: 数据的参数数目。当前例子当中,对收集到的数据只考虑灰度值,所以该值为1。

RANGE: 灰度值范围,通常是[0,256],也就是灰度所有的取值范围。

统计直方图同样有两种方法,使用opencv统计直方图,函数如下:

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])

该函数的参数在了解以上术语加上自己百度后可以简单应用

使用numpy统计函数,主要应用 numpy.histogram() 函数(还有 np.bincount() ,还未尝试,读者可以自己尝试,大抵使用方法相同)

hist,bins = np.histogram(img.ravel(),256,[0,256])

opencv处理速度优于numpy,同时对于学习opencv的同学来说,多运用cv的处理方法无疑更利于学习。

绘制直方图

绘制直方图一般使用Matplotlib绘制 ,这里要提一下matplotlib的 matplotlib.pyplot.hist() 函数,该函数可以直接统计绘制中方图。统计函数为 calcHist()np.histogram()
这是处理的样图

opencv python统计及绘制直方图的方法

下面是代码实现

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('/home/yc/Pictures/cat.jpg',0)
plt.hist(img.ravel(),256,[0,256]);
plt.show()

效果

opencv python统计及绘制直方图的方法

灰度直方图

当然,在颜色图像检索之类用法时,我们需要的是BGR直方图,原理类似,统计时使用 cv2.calcHist()

函数

import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('/home/yc/Pictures/cat.jpg',1)
color = ('b','g','r')
for i,col in enumerate(color):
  histr = cv2.calcHist([img],[i],None,[256],[0,256])
  plt.plot(histr,color = col)
  plt.xlim([0,256])
plt.show()

效果如下

opencv python统计及绘制直方图的方法

BGR直方图

此外,再介绍一种很原始的计算灰度直方图的方法……感觉代码注释的很完整,相信读者也可以看懂

import sys
import numpy as np
import cv2
import matplotlib.pyplot as plt

def main():
  img=cv2.imread('/home/yc/Pictures/cat.jpg',0)
  #得到计算灰度直方图的值
  xy=xygray(img)  

  #画出灰度直方图
  x_range=range(256)
  plt.plot(x_range,xy,"r",linewidth=2,c='black')
  #设置坐标轴的范围
  y_maxValue=np.max(xy)
  plt.axis([0,255,0,y_maxValue])
  #设置坐标轴的标签
  plt.xlabel('gray Level')
  plt.ylabel("number of pixels")
  plt.show()

def xygray(img):
  #得到高和宽
  rows,cols=img.shape
  #存储灰度直方图
  xy=np.zeros([256],np.uint64)
  for r in range(rows):
    for c in range(cols):
      xy[img[r][c]] += 1
  #返回一维ndarry
  return xy

main()

效果如下

opencv python统计及绘制直方图的方法

灰度直方图

以上就是本文的全部内容,与一起学习opencv的同学共勉,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python进程类subprocess的一些操作方法例子
Nov 22 Python
关于你不想知道的所有Python3 unicode特性
Nov 28 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
python多维数组切片方法
Apr 13 Python
python 划分数据集为训练集和测试集的方法
Dec 11 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
python装饰器原理与用法深入详解
Dec 19 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
基于python实现上传文件到OSS代码实例
May 09 Python
django和flask哪个值得研究学习
Jul 31 Python
用Python提取PDF表格的方法
Apr 11 Python
python numpy 按行归一化的实例
Jan 21 #Python
python树莓派红外反射传感器
Jan 21 #Python
python实现自动解数独小程序
Jan 21 #Python
python 将对象设置为可迭代的两种实现方法
Jan 21 #Python
python 实现敏感词过滤的方法
Jan 21 #Python
python执行精确的小数计算方法
Jan 21 #Python
详解安装mitmproxy以及遇到的坑和简单用法
Jan 21 #Python
You might like
用Flash图形化数据(一)
2006/10/09 PHP
浅谈PHP接收POST数据方式
2015/06/05 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
2016/10/14 PHP
PHP实现打包下载文件的方法示例
2017/10/07 PHP
关于javascript中this关键字(翻译+自我理解)
2010/10/20 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
python实现电子产品商店
2019/02/26 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
使用Keras实现简单线性回归模型操作
2020/06/12 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
太太口服液广告词
2014/03/20 职场文书
产品质量承诺书
2014/03/27 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
领导干部失职检讨书
2015/05/05 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
python字符串常规操作大全
2021/05/02 Python
MySQL RC事务隔离的实现
2022/03/31 MySQL