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映射列表实例分析
Jan 26 Python
python实现提取百度搜索结果的方法
May 19 Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 Python
python+pygame简单画板实现代码实例
Dec 13 Python
django manage.py扩展自定义命令方法
May 27 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
Django model.py表单设置默认值允许为空的操作
May 19 Python
如何通过命令行进入python
Jul 06 Python
Python基于字典实现switch case函数调用
Jul 22 Python
Python3中PyQt5简单实现文件打开及保存
Jun 10 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
PHP缓存机制Output Control详解
2014/07/14 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
Javascript实现div层渐隐效果的方法
2015/05/30 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
解决option标签selected="selected"属性失效的问题
2017/11/06 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
说说如何使用Vuex进行状态管理(小结)
2019/04/14 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
Python的string模块中的Template类字符串模板用法
2016/06/27 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
python实现烟花小程序
2019/01/30 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
一道Delphi面试题
2016/10/28 面试题
大客户销售经理职责
2013/12/04 职场文书
《猫》教学反思
2014/02/26 职场文书
信访工作经验交流材料
2014/05/23 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
教师调动申请报告
2015/05/18 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL
Python中22个万用公式的小结
2021/07/21 Python
Django框架模板用法详解
2022/06/10 Python