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分割TXT文件成4K的TXT文件
May 23 Python
Python类属性的延迟计算
Oct 22 Python
Python多维/嵌套字典数据无限遍历的实现
Nov 04 Python
python实现textrank关键词提取
Jun 22 Python
学习和使用python的13个理由
Jul 30 Python
Django框架安装方法图文详解
Nov 04 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
python 通过视频url获取视频的宽高方式
Dec 10 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
Pymysql实现往表中插入数据过程解析
Jun 02 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 Python
Python实现byte转integer
Jun 03 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 chmod 函数与批量修改文件目录权限
2010/05/10 PHP
php设计模式 Delegation(委托模式)
2011/06/26 PHP
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
js图片延迟加载(Lazyload)三种实现方式
2017/03/01 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
jQuery实现左右滑动的toggle方法
2018/03/03 jQuery
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
2020/01/25 Python
python+requests接口自动化框架的实现
2020/08/31 Python
物业管理求职自荐信
2013/09/25 职场文书
高校十八大报告感想
2014/01/27 职场文书
四年级科学教学反思
2014/02/10 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
建筑结构施工求职信
2014/07/11 职场文书
2014年小学少先队工作总结
2014/12/18 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
小学作文之描写天气
2019/08/15 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
MySQL数据库 安全管理
2022/05/06 MySQL
Android基础入门之dataBinding的简单使用教程
2022/06/21 Java/Android