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实现apahce网站日志分析示例
Apr 02 Python
python执行子进程实现进程间通信的方法
Jun 02 Python
django解决跨域请求的问题
Nov 11 Python
Python unittest 简单实现参数化的方法
Nov 30 Python
Python中文件的写入读取以及附加文字方法
Jan 23 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
Apr 05 Python
Django Rest framework频率原理与限制
Jul 26 Python
对Django的restful用法详解(自带的增删改查)
Aug 28 Python
多个python文件调用logging模块报错误
Feb 12 Python
Python中有几个关键字
Jun 04 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
python实现简单的五子棋游戏
Sep 01 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
php读取图片内容并输出到浏览器的实现代码
2013/08/08 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
js获取当前页面路径示例讲解
2014/01/08 Javascript
createTextRange()的使用示例含文本框选中部分文字内容
2014/02/24 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
获取url中用&隔开的参数实例(分享)
2017/05/28 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
Python实现处理管道的方法
2015/06/04 Python
Python本地与全局命名空间用法实例
2015/06/16 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
Django实现学员管理系统
2019/02/26 Python
如何基于python测量代码运行时间
2019/12/25 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
Python3 用什么IDE开发工具比较好
2020/11/28 Python
python 6种方法实现单例模式
2020/12/15 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
Europcar澳大利亚官网:全球汽车租赁领域的领导者
2019/03/24 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
如何查找网页漏洞
2016/06/22 面试题
会计自我鉴定
2013/11/02 职场文书
物流专业大学的自我评价
2014/01/11 职场文书
招商专员岗位职责
2014/02/08 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL
Python数组变形的几种实现方法
2022/05/30 Python