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 logging类库使用例子
Nov 22 Python
Python2.x版本中cmp()方法的使用教程
May 14 Python
python从入门到精通(DAY 2)
Dec 20 Python
Python中表示字符串的三种方法
Sep 06 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
Nov 30 Python
python设置值及NaN值处理方法
Jul 03 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
Python实现Linux监控的方法
May 16 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 Python
django xadmin 管理器常用显示设置方式
Mar 11 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
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
jquery图形密码实现方法
2015/03/11 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
2016/05/12 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
Python文件和流(实例讲解)
2017/09/12 Python
Python BS4库的安装与使用详解
2018/08/08 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
Django分组聚合查询实例分享
2020/04/29 Python
Python绘制组合图的示例
2020/09/18 Python
如何用python开发Zeroc Ice应用
2021/01/29 Python
python实现计算图形面积
2021/02/22 Python
html5的websockets全双工通信详解学习示例
2014/02/26 HTML / CSS
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
优秀英语专业毕业生求职信
2013/11/23 职场文书
社区包粽子活动方案
2014/01/21 职场文书
回门宴父母答谢词
2014/01/26 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
关于建议书的格式范文
2014/05/20 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
2014年财务个人工作总结
2014/12/08 职场文书
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript