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编写Linux系统守护进程实例
Feb 03 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
Oct 25 Python
Windows系统下PhantomJS的安装和基本用法
Oct 21 Python
pygame游戏之旅 添加碰撞效果的方法
Nov 20 Python
python版本五子棋的实现代码
Dec 11 Python
对pyqt5多线程正确的开启姿势详解
Jun 14 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Python如何批量获取文件夹的大小并保存
Mar 31 Python
Python 防止死锁的方法
Jul 29 Python
Python 如何将integer转化为罗马数(3999以内)
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 时间计算问题小结
2009/01/04 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
JS实现一键回顶功能示例代码
2013/10/28 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
python获取元素在数组中索引号的方法
2015/07/15 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
SQL SERVER面试资料
2013/03/30 面试题
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
创先争优宣传标语
2014/10/08 职场文书
个人欠款协议书范本2014
2014/11/02 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
刑事和解协议书范本
2014/11/19 职场文书
大学生毕业个人总结
2015/02/15 职场文书
九年级化学教学反思
2016/02/22 职场文书