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解析树及树的遍历
Feb 03 Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 Python
Python实现屏幕截图的代码及函数详解
Oct 01 Python
详谈Python2.6和Python3.0中对除法操作的异同
Apr 28 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
Oct 20 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
python实现傅里叶级数展开的实现
Jul 21 Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 Python
linux环境下安装python虚拟环境及注意事项
Jan 07 Python
pytorch数据预处理错误的解决
Feb 20 Python
Python sorted对list和dict排序
Jun 09 Python
手把手教你使用TensorFlow2实现RNN
Jul 15 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
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
php实现兼容2038年后Unix时间戳转换函数
2015/03/18 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
学习YUI.Ext第七日-View&JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
JS实现的生成随机数的4个函数分享
2015/02/11 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
使用Vue组件实现一个简单弹窗效果
2018/04/23 Javascript
Promise.all中对于reject的处理方法
2018/08/01 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
python 实现登录网页的操作方法
2018/05/11 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
如何获取Python简单for循环索引
2019/11/21 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
基于打开pycharm有带图片md文件卡死问题的解决
2020/04/24 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
柏林通行证:Berlin Pass
2018/04/11 全球购物
试述DBMS的主要功能
2016/11/13 面试题
.net软件工程师应聘上机试题
2015/03/10 面试题
实习生评语
2014/04/26 职场文书
优秀毕业生求职信
2014/06/05 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
保密工作整改报告
2014/11/06 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸