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类参数self使用示例
Feb 17 Python
Python中一些自然语言工具的使用的入门教程
Apr 13 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
Python简单实现socket信息发送与监听功能示例
Jan 03 Python
Python将图片转换为字符画的方法
Jun 16 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
Python如何爬取实时变化的WebSocket数据的方法
Mar 09 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
基于Python解密仿射密码
Oct 21 Python
Python高级特性——详解多维数组切片(Slice)
Nov 26 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 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取整数函数常用的四种方法小结
2012/07/05 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
2010/05/24 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
JavaScript数组去重的几种方法
2019/04/07 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
Python 和 JS 有哪些相同之处
2017/11/23 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
python虚拟环境完美部署教程
2019/08/06 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
Python grpc超时机制代码示例
2020/09/14 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
消防先进事迹材料
2014/02/10 职场文书
新年联欢会主持词
2014/03/27 职场文书
《菜园里》教学反思
2014/04/17 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
三好学生事迹材料
2014/12/24 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书
如何用python清洗文件中的数据
2021/06/18 Python
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB