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 不同对象比较大小示例探讨
Aug 21 Python
python中类的一些方法分析
Sep 25 Python
python实现web方式logview的方法
Aug 10 Python
Python基础教程之内置函数locals()和globals()用法分析
Mar 16 Python
python逆序打印各位数字的方法
Jun 25 Python
python文件写入write()的操作
May 14 Python
Django实现文件上传下载
Oct 06 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
Dec 02 Python
Python 实现数组相减示例
Dec 27 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
MATLAB数学建模之画图汇总
Jul 16 Python
如何用python插入独创性声明
Mar 31 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
图形数字验证代码
2006/10/09 PHP
php gd2 上传图片/文字水印/图片水印/等比例缩略图/实现代码
2010/05/15 PHP
php通过smtp邮件验证登陆的方法
2016/05/11 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
动态加载iframe
2006/06/16 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
js实现继承的方法及优缺点总结
2019/05/08 Javascript
Python文件处理
2016/02/29 Python
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
Python数据结构dict常用操作代码实例
2020/03/12 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
十佳护士获奖感言
2014/02/18 职场文书
保证书范文大全
2014/04/28 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js