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脚本来删除指定容量以上的文件的教程
May 04 Python
python从网络读取图片并直接进行处理的方法
May 22 Python
使用Python写个小监控
Jan 27 Python
解决pandas 作图无法显示中文的问题
May 24 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
使用Python画股票的K线图的方法步骤
Jun 28 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
如何基于pythonnet调用halcon脚本
Jan 20 Python
python属于解释型语言么
Jun 15 Python
Python 生成短8位唯一id实战教程
Jan 13 Python
python关于集合的知识案例详解
May 30 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
windows平台中配置nginx+php环境
2015/12/06 PHP
PHP session 会话处理函数
2016/06/06 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
JQuery对表格进行操作的常用技巧总结
2014/04/23 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
浅谈js中的this问题
2017/08/31 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
2020/03/03 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
Python 日期的转换及计算的具体使用详解
2020/01/16 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
django配置app中的静态文件步骤
2020/03/27 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
如何表示python中的相对路径
2020/07/08 Python
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
给排水工程师岗位职责
2013/11/21 职场文书
安全教育感言
2014/03/04 职场文书
实习推荐信
2014/05/10 职场文书
文明班级建设方案
2014/05/15 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python