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的迭代器与生成器实例详解
Jul 16 Python
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
将Python的Django框架与认证系统整合的方法
Jul 24 Python
python调用fortran模块
Apr 08 Python
python运行时间的几种方法
Jun 17 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
python3 pathlib库Path类方法总结
Dec 26 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
Apr 13 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
如何分别全角和半角以避免乱码
2006/10/09 PHP
用PHP实现小型站点广告管理
2006/10/09 PHP
完美解决PHP中文乱码
2009/11/26 PHP
PHP防盗链代码实例
2014/08/27 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
浅谈vuex的基本用法和mapaction传值问题
2019/11/08 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
vue watch监控对象的简单方法示例
2021/01/07 Vue.js
python基础教程之元组操作使用详解
2014/03/25 Python
分享python数据统计的一些小技巧
2016/07/21 Python
python中的格式化输出用法总结
2016/07/28 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
Python语言进阶知识点总结
2019/05/28 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
基于Python函数和变量名解析
2019/07/19 Python
Python partial函数原理及用法解析
2019/12/11 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
采购主管岗位职责
2014/02/01 职场文书
美术教师求职信范文
2015/03/20 职场文书
道歉的话语大全
2015/05/12 职场文书
2015年检察院个人工作总结
2015/05/20 职场文书