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字符编码
Nov 12 Python
Pandas标记删除重复记录的方法
Apr 08 Python
python使用tornado实现登录和登出
Jul 28 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
Python基本socket通信控制操作示例
Jan 30 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
Python画图高斯分布的示例
Jul 10 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
通过实例解析Python RPC实现原理及方法
Jul 07 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
Python基于callable函数检测对象是否可被调用
Oct 16 Python
python实现简单反弹球游戏
Apr 12 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
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
2016/03/17 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
详解ES6 export default 和 import语句中的解构赋值
2019/05/28 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
Django接受前端数据的几种方法总结
2016/11/04 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
django实现用户注册实例讲解
2019/10/30 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
家庭户外服装:Hawkshead
2017/11/02 全球购物
网络方面基础面试题
2012/11/16 面试题
八年级历史教学反思
2014/01/10 职场文书
高一英语教学反思
2014/01/22 职场文书
药品业务员岗位职责
2014/04/17 职场文书
农业项目合作意向书
2015/05/08 职场文书
校运会广播稿
2015/08/19 职场文书
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python
python脚本框架webpy模板控制结构
2021/11/20 Python