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实现多线程采集的2个代码例子
Jul 07 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
通过Python 接口使用OpenCV的方法
Apr 02 Python
pandas 选择某几列的方法
Jul 03 Python
Python 实用技巧之利用Shell通配符做字符串匹配
Aug 23 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
Oct 06 Python
python实现信号时域统计特征提取代码
Feb 26 Python
python实现图片横向和纵向拼接
Mar 05 Python
python datetime处理时间小结
Apr 16 Python
如何使用python切换hosts文件
Apr 29 Python
Django中ORM找出内容不为空的数据实例
May 20 Python
python生成xml时规定dtd实例方法
Sep 21 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的博客ping服务代码
2012/02/04 PHP
yii用户注册表单验证实例
2015/12/26 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
jquery中ajax学习笔记3
2011/10/16 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
JQUERY 设置SELECT选中项代码
2014/02/07 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
详解Vue方法与事件
2017/03/09 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
JS中数据结构之栈
2019/01/01 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
python实现文件的分割与合并
2019/08/29 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
关于旷工的检讨书
2014/02/02 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
李强感恩观后感
2015/06/17 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
java中重写父类方法加不加@Override详解
2021/06/21 Java/Android
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
浅析python中特殊文件和特殊函数
2022/02/24 Python
Linux中sftp常用命令整理
2022/06/28 Servers
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS