opencv python 2D直方图的示例代码


Posted in Python onJuly 20, 2018

Histograms - 3 : 2D Histograms

我们已经计算并绘制了一维直方图,因为我们只考虑一个特征,即像素的灰度强度值.但在二维直方图中,需要考虑两个特征,通常,它用于查找颜色直方图,其中两个要素是每个像素的色调和饱和度值.

OpenCV中的2D直方图

使用函数cv.calcHist(), 对于颜色直方图,我们需要将图像从BGR转换为HSV。 (请记住,对于1D直方图,我们从BGR转换为灰度)。对于2D直方图,其参数将修改如下:

  • channels = [0,1]:因为我们需要同时处理H(色调Hue)和S(饱和度Saturation).
  • bins = [180,256]:180对应H,256对应S.
  • range = [0,180,0,256]:色调值介于0到180之间,饱和度介于0到256之间.
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img.jpg')

hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

Numpy中的2D直方图

np.histogram2d(). (注意,对于1D直方图,我们使用np.histogram()

hist, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])

第一个参数是H平面,第二个是S平面,第三个是每个bins的数量,第四个是它们的范围

绘制2D直方图

方法 - 1:使用cv.imshow()

我们得到的结果是一个大小为180x256的二维数组. 因此我们可以像使用cv.imshow()函数一样正常显示它们. 它将是一个灰度图像,它不会告诉你什么颜色,除非你知道不同颜色的色调.

方法-2:使用Matplotlib

我们可以使用matplotlib.pyplot.imshow()函数绘制具有不同颜色图的2D直方图. 它让我们更好地了解不同的像素密度, 但是,除非你知道不同颜色的色调值,否则这也不会让我们知道第一眼看到的是什么颜色. 它简单而且更好.
代码:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img6.png')

hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

hist = cv2.calcHist([hsv], [0,1], None, [180,256], [0,180,0,256])

plt.imshow(hist, interpolation='nearest')
plt.show()

opencv python 2D直方图的示例代码

opencv python 2D直方图的示例代码

在直方图中,你可以看到H=100和S=200附近的一些高值,它对应于天空的蓝色.同样,在H=25和S=100附近也可以看到另一个峰值,它对应着宫殿的黄色.

方法-3:OpenCV样本风格

在Opencv-Python2样本中有一个用于颜色直方图的示例代码(samples/python/color_histogram.py).如果您运行代码,您可以看到直方图显示相应的颜色,或者简单地输出一个颜色编码的直方图.它的结果非常好(尽管您需要添加一些额外的行).
在这段代码中,作者在HSV中创建了一个彩色地图,然后将其转换为BGR,生成的直方图图像与此颜色图相乘,他还使用一些预处理步骤来移除小的孤立像素,从而形成一个良好的直方图.

opencv python 2D直方图的示例代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
详解Python3.1版本带来的核心变化
Apr 07 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
Python判断telnet通不通的实例
Jan 26 Python
2019 Python最新面试题及答案16道题
Apr 11 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
Jul 12 Python
基于django ManyToMany 使用的注意事项详解
Aug 09 Python
python爬虫如何解决图片验证码
Feb 14 Python
如何用 Python 制作 GitHub 消息助手
Feb 20 Python
Linux下python制作名片示例
Jul 20 #Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 #Python
使用python脚本实现查询火车票工具
Jul 19 #Python
Python 判断文件或目录是否存在的实例代码
Jul 19 #Python
Flask框架Jinjia模板常用语法总结
Jul 19 #Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 #Python
python代码过长的换行方法
Jul 19 #Python
You might like
二次元帅气男生排行榜,只想悄悄收藏系列
2020/03/04 日漫
mysql5详细安装教程
2007/01/15 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
PDO::errorCode讲解
2019/01/28 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
Using the TextRange Object
2006/10/14 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
Vue + Webpack + Vue-loader学习教程之功能介绍篇
2017/03/14 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
Python实现CET查分的方法
2015/03/10 Python
Python定时任务sched模块用法示例
2018/07/16 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
python批量解压zip文件的方法
2019/08/20 Python
Python 如何对文件目录操作
2020/07/10 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
html5使用canvas画三角形
2014/12/15 HTML / CSS
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
护理个人求职信范文
2014/01/08 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
跳槽求职信范文
2014/05/26 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
计划生育目标责任书
2015/05/09 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书