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获取电脑硬件信息及状态的实现方法
Aug 29 Python
使用pdb模块调试Python程序实例
Jun 02 Python
Python的SimpleHTTPServer模块用处及使用方法简介
Jan 22 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
django从请求到响应的过程深入讲解
Aug 01 Python
pymongo中group by的操作方法教程
Mar 22 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
Python计算公交发车时间的完整代码
Feb 12 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
Python 中如何写注释
Aug 28 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读书笔记_运算符详解
2016/07/01 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
2013/04/08 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
13个PHP函数超实用
2015/10/21 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
Ubuntu下Anaconda和Pycharm配置方法详解
2019/06/14 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
python开根号实例讲解
2020/08/30 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
物控部经理职务说明书
2014/02/25 职场文书
房地产推广策划方案
2014/05/19 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
教师工作决心书
2015/02/04 职场文书
出国导师推荐信
2015/03/25 职场文书
尼克胡哲观后感
2015/06/08 职场文书
初中语文教师研修日志
2015/11/13 职场文书