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实现扫描指定目录下的子目录及文件的方法
Jul 16 Python
Python中Class类用法实例分析
Nov 12 Python
python使用fork实现守护进程的方法
Nov 16 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
Python从函数参数类型引出元组实例分析
May 28 Python
Python中asyncio模块的深入讲解
Jun 10 Python
24式加速你的Python(小结)
Jun 13 Python
Python实现12306火车票抢票系统
Jul 04 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Django REST Framework之频率限制的使用
Sep 29 Python
python re的findall和finditer的区别详解
Nov 15 Python
一文搞懂如何实现Go 超时控制
Mar 30 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
杏林同学录(六)
2006/10/09 PHP
NT IIS下用ODBC连接数据库
2006/10/09 PHP
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
探讨:如何编写PHP扩展
2013/06/13 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
javascript的console.log()用法小结
2012/05/31 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
Python找出最小的K个数实例代码
2018/01/04 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
Python pandas如何向excel添加数据
2020/05/22 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
html5 制作地图当前定位箭头的方法示例
2020/01/10 HTML / CSS
新员工培训个人的自我评价
2013/10/09 职场文书
营销与策划应届生求职信
2013/11/04 职场文书
工程技术员岗位职责
2014/03/02 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
优秀党员申报材料
2014/12/18 职场文书
员工辞职信范文
2015/03/02 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
Python中22个万用公式的小结
2021/07/21 Python