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正则匹配抓取豆瓣电影链接和评论代码分享
Dec 27 Python
Python使用MONGODB入门实例
May 11 Python
Python中使用asyncio 封装文件读写
Sep 11 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
Python IDLE入门简介
Dec 08 Python
使用Python进行目录的对比方法
Nov 01 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
基于tensorflow for循环 while循环案例
Jun 30 Python
Python爬虫防封ip的一些技巧
Aug 06 Python
利用Python网络爬虫爬取各大音乐评论的代码
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
PHP遍历数组的方法汇总
2015/04/30 PHP
PHP里的单例类写法实例
2015/06/25 PHP
举例详解PHP脚本的测试方法
2015/08/05 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
PHP实现简易图形计算器
2020/08/28 PHP
js loading加载效果实现代码
2009/11/24 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
一个JS的日期格式化算法示例
2013/07/31 Javascript
关于Jquery操作Cookie取值错误的解决方法
2013/08/26 Javascript
JS注释所产生的bug 即使注释也会执行
2013/11/19 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
Javascript中arguments和arguments.callee的区别浅析
2015/04/24 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
详解vue 自定义marquee无缝滚动组件
2019/04/09 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
Python设计模式之单例模式实例
2014/04/26 Python
Python内置模块turtle绘图详解
2017/12/09 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
python实现随机漫步方法和原理
2019/06/10 Python
python利用opencv保存、播放视频
2020/11/02 Python
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
洗发露广告词
2014/03/14 职场文书
入股协议书范本
2014/04/14 职场文书
临床专业自荐信
2014/06/22 职场文书
汽车转让协议书
2015/01/29 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL
SQL Server表分区删除详情
2021/10/16 SQL Server