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使用pil生成缩略图的方法
Mar 26 Python
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
python numpy函数中的linspace创建等差数列详解
Oct 13 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 Python
python清除函数占用的内存方法
Jun 25 Python
使用python验证代理ip是否可用的实现方法
Jul 25 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
pycharm安装及如何导入numpy
Apr 03 Python
Python基于requests实现模拟上传文件
Apr 21 Python
Python读取xlsx数据生成图标代码实例
Aug 12 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
Python装饰器详细介绍
Mar 25 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
phpmyadmin操作流程
2006/10/09 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
fastclick插件导致日期(input[type="date"])控件无法被触发该如何解决
2015/11/09 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
Python 连连看连接算法
2008/11/22 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
详解多线程Django程序耗尽数据库连接的问题
2018/10/08 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
DELPHI面试题研发笔试试卷
2015/11/08 面试题
工程测量与监理专业应届生求职信
2013/11/27 职场文书
幼儿园儿童节主持词
2014/03/21 职场文书
2015年小学生自我评价范文
2015/03/03 职场文书
疾病证明书
2015/06/19 职场文书
怎样写好工作计划
2019/04/10 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang