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使用nntp读取新闻组内容的方法
May 08 Python
python中偏函数partial用法实例分析
Jul 08 Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 Python
python简单商城购物车实例代码
Mar 15 Python
解决python删除文件的权限错误问题
Apr 24 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
Python使用pymongo库操作MongoDB数据库的方法实例
Feb 22 Python
django foreignkey外键使用的例子 相当于left join
Aug 06 Python
python统计字符的个数代码实例
Feb 07 Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
Django DRF APIView源码运行流程详解
Aug 17 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 explode函数实例代码
2012/02/27 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
vue+element实现打印页面功能
2019/05/20 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
python3.3实现乘法表示例
2014/02/07 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
Python面向对象类的继承实例详解
2018/06/27 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
Python chardet库识别编码原理解析
2020/02/18 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
JVM是一个编译程序还是解释程序
2012/09/11 面试题
公务员职务工作的自我评价
2013/11/01 职场文书
销售求职信范文
2014/05/26 职场文书
如何自己动手写SQL执行引擎
2021/06/02 MySQL