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 07 Python
在Windows8上的搭建Python和Django环境
Jul 03 Python
Python遍历指定文件及文件夹的方法
May 09 Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
python通过opencv实现批量剪切图片
Nov 13 Python
pandas多级分组实现排序的方法
Apr 20 Python
python对视频画框标记后保存的方法
Dec 07 Python
Django REST framework视图的用法
Jan 16 Python
Python数据类型之Set集合实例详解
May 07 Python
在Python中COM口的调用方法
Jul 03 Python
Python生成词云的实现代码
Jan 14 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 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_xmlhttp 乱码问题解决方法
2009/08/07 PHP
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
初识Node.js
2015/03/20 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
python实现kmp算法的实例代码
2019/04/03 Python
django query模块
2019/04/20 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
Django实现WebSSH操作物理机或虚拟机的方法
2019/11/06 Python
python3 配置logging日志类的操作
2020/04/08 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
通过实例解析python and和or使用方法
2020/11/14 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
单位成立周年感言
2014/01/26 职场文书
公司业务员岗位职责
2014/03/18 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
工作感想范文
2015/08/07 职场文书
保姆聘用合同
2015/09/21 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
面试必问:圣杯布局和双飞翼布局的区别
2021/05/13 HTML / CSS
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python
nginx.conf配置文件结构小结
2022/04/08 Servers
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers