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列表与元组详解实例
Nov 01 Python
Python文件去除注释的方法
May 25 Python
python实现数独算法实例
Jun 09 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
python实现对服务器脚本敏感信息的加密解密功能
Aug 13 Python
Python绘制股票移动均线的实例
Aug 24 Python
Python完全识别验证码自动登录实例详解
Nov 24 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
利用python如何实现猫捉老鼠小游戏
Dec 04 Python
python反编译教程之2048小游戏实例
Mar 03 Python
Python实现批量将文件复制到新的目录中再修改名称
Apr 12 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处理斐波那契数列非递归方法
2012/02/04 PHP
如何在PHP中使用正则表达式进行查找替换
2013/06/13 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
浅析PHP开发规范
2018/02/05 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
js中typeof的用法汇总
2013/12/12 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
JS实现点击登录弹出窗口同时背景色渐变动画效果
2016/03/25 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
学习vue.js计算属性
2016/12/03 Javascript
详解js的六大数据类型
2016/12/27 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
2017/01/10 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
nodejs取得当前执行路径的方法
2018/05/13 NodeJs
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
Python的Django框架中的表单处理示例
2015/07/17 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
python实现简单的五子棋游戏
2020/09/01 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
三关爱志愿服务活动方案
2014/08/17 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
创业计划书介绍
2019/04/24 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python