python OpenCV学习笔记实现二维直方图


Posted in Python onFebruary 08, 2018

本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下:

官方文档 ? https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d_histogram.html

在前一篇文章中,我们计算并绘制了一维的直方图。它被称为一维,因为我们只考虑一个特性,即像素的灰度强度值。但是在二维直方图中,你可以考虑两个特征。通常它用于寻找颜色直方图,其中两个特征是每个像素的色调和饱和度值。
有一个python样例(samples/python/color_histogram.py),用于查找颜色直方图。我们将尝试理解如何创建这样的彩色直方图,它将有助于理解像直方图反向投影这样的更深入的主题。

OpenCV中的二维直方图

它非常简单,并且使用相同的函数cv.calcHist()来计算。对于颜色直方图,我们需要将图像从BGR转换为HSV。(记住,对于一维的直方图,我们从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 numpy as np
import cv2 as cv

img = cv.imread('home.jpg')
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)

hist = cv.calcHist([hsv], [0,1], None, [180,256], [0,180,0,256])

Numpy中的二维直方图

Numpy同样提供特有的函数,np.histogram2d()(记住,对于一维直方图,用函数np.histogram())

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('home.jpg')
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)

hist, xbins, ybins = np.histogram2d(h.ravel(), s.ravel(), [180,256], [[0,180], [0,256]])

第一个参数是H平面,第二个是S平面,第三个是每个bins的数量,第四个是它们的范围。

绘制二维直方图

方法1:使用cv.imshow()

我们得到的结果是一个二维数组大小为180x256。因此,我们可以像往常一样使用cv.imshow()函数来显示它们。它将是一个灰度图像,它不会告诉你什么颜色,除非你知道不同颜色的色调。

方法2:使用Matplotlib

我们可以使用matplotlib.pyplot.imshow()函数来绘制具有不同颜色映射的2D直方图。它给我们提供了一个更好的关于不同像素密度的想法。但这也不能让我们知道第一眼看到的是什么颜色,除非你知道不同颜色的色调。这很简单,也更好。

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('home.jpg')
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
hist = cv.calcHist([hsv], [0,1], None, [180,256], [0,180,0,256])

plt.imshow(hist, interpolation='nearest')
plt.show()

下面是输入图像和它的彩色直方图图。X轴表示S值(饱和度),Y轴表示色调。

python OpenCV学习笔记实现二维直方图

在直方图中,你可以看到H=100和S=200附近的一些高值。它对应于天空的蓝色。同样,在H=25和S=100附近也可以看到另一个峰值。它对应着宫殿的黄色。您可以使用像GIMP这样的图像编辑工具来验证它。

方法3:OpenCV sample style

在Opencv-Python2样本中有一个用于颜色直方图的示例代码(samples/python/color_histogram.py)。如果您运行代码,您可以看到直方图显示相应的颜色。或者简单地输出一个颜色编码的直方图。它的结果非常好(尽管您需要添加一些额外的行)。
在这段代码中,作者在HSV中创建了一个彩色地图。然后将其转换为BGR。生成的直方图图像与此颜色图相乘。他还使用一些预处理步骤来移除小的孤立像素,从而形成一个良好的直方图。

python OpenCV学习笔记实现二维直方图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
由Python运算π的值深入Python中科学计算的实现
Apr 17 Python
windows下ipython的安装与使用详解
Oct 20 Python
Python如何快速实现分布式任务
Jul 06 Python
Python实现时钟显示效果思路详解
Apr 11 Python
Django框架多表查询实例分析
Jul 04 Python
python绘制简单彩虹图
Nov 19 Python
Python 实现的 Google 批量翻译功能
Aug 26 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
Python中格式化字符串的四种实现
May 26 Python
PyTorch预训练Bert模型的示例
Nov 17 Python
Spy++的使用方法及下载教程
Jan 29 Python
详解python的内存分配机制
May 10 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 #Python
Python编程argparse入门浅析
Feb 07 #Python
PyQt5主窗口动态加载Widget实例代码
Feb 07 #Python
学习python中matplotlib绘图设置坐标轴刻度、文本
Feb 07 #Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 #Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 #Python
Python实现上下班抢个顺风单脚本
Feb 07 #Python
You might like
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
php过滤HTML标签、属性等正则表达式汇总
2014/09/22 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
浅谈php提交form表单
2015/07/01 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
js 文件引入实现代码
2010/04/23 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
2016/05/25 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
jQuery电话号码验证实例
2017/01/05 Javascript
各种选择框jQuery的选中方法(实例讲解)
2017/06/27 jQuery
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
python操作文件的参数整理
2019/06/11 Python
Python3+Appium安装使用教程
2019/07/05 Python
python缩进长度是否统一
2020/08/02 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
毕业生的自我评价
2013/12/30 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
办公室管理规章制度
2015/08/04 职场文书
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js