opencv python 2D直方图的示例代码


Posted in Python onJuly 20, 2018

Histograms - 3 : 2D Histograms

我们已经计算并绘制了一维直方图,因为我们只考虑一个特征,即像素的灰度强度值.但在二维直方图中,需要考虑两个特征,通常,它用于查找颜色直方图,其中两个要素是每个像素的色调和饱和度值.

OpenCV中的2D直方图

使用函数cv.calcHist(), 对于颜色直方图,我们需要将图像从BGR转换为HSV。 (请记住,对于1D直方图,我们从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 cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img.jpg')

hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

Numpy中的2D直方图

np.histogram2d(). (注意,对于1D直方图,我们使用np.histogram()

hist, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])

第一个参数是H平面,第二个是S平面,第三个是每个bins的数量,第四个是它们的范围

绘制2D直方图

方法 - 1:使用cv.imshow()

我们得到的结果是一个大小为180x256的二维数组. 因此我们可以像使用cv.imshow()函数一样正常显示它们. 它将是一个灰度图像,它不会告诉你什么颜色,除非你知道不同颜色的色调.

方法-2:使用Matplotlib

我们可以使用matplotlib.pyplot.imshow()函数绘制具有不同颜色图的2D直方图. 它让我们更好地了解不同的像素密度, 但是,除非你知道不同颜色的色调值,否则这也不会让我们知道第一眼看到的是什么颜色. 它简单而且更好.
代码:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('img6.png')

hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

hist = cv2.calcHist([hsv], [0,1], None, [180,256], [0,180,0,256])

plt.imshow(hist, interpolation='nearest')
plt.show()

opencv python 2D直方图的示例代码

opencv python 2D直方图的示例代码

在直方图中,你可以看到H=100和S=200附近的一些高值,它对应于天空的蓝色.同样,在H=25和S=100附近也可以看到另一个峰值,它对应着宫殿的黄色.

方法-3:OpenCV样本风格

在Opencv-Python2样本中有一个用于颜色直方图的示例代码(samples/python/color_histogram.py).如果您运行代码,您可以看到直方图显示相应的颜色,或者简单地输出一个颜色编码的直方图.它的结果非常好(尽管您需要添加一些额外的行).
在这段代码中,作者在HSV中创建了一个彩色地图,然后将其转换为BGR,生成的直方图图像与此颜色图相乘,他还使用一些预处理步骤来移除小的孤立像素,从而形成一个良好的直方图.

opencv python 2D直方图的示例代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python缩进区别分析
Feb 15 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
Python实现代码统计工具(终极篇)
Jul 04 Python
使用python实现knn算法
Dec 20 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
linux下python使用sendmail发送邮件
May 22 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
Dec 12 Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 Python
python替换字符串中的子串图文步骤
Jun 19 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
python unittest单元测试的步骤分析
Aug 02 Python
Linux下python制作名片示例
Jul 20 #Python
Python爬虫的两套解析方法和四种爬虫实现过程
Jul 20 #Python
使用python脚本实现查询火车票工具
Jul 19 #Python
Python 判断文件或目录是否存在的实例代码
Jul 19 #Python
Flask框架Jinjia模板常用语法总结
Jul 19 #Python
python一行sql太长折成多行并且有多个参数的方法
Jul 19 #Python
python代码过长的换行方法
Jul 19 #Python
You might like
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
PHP基于swoole多进程操作示例
2019/08/12 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
基于jquery的商品展示放大镜
2010/08/07 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
用Move.js配合创建CSS3动画的入门指引
2015/07/22 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
python实现求特征选择的信息增益
2018/12/18 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
详解Python中第三方库Faker
2020/09/25 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
python如何实现递归转非递归
2021/02/25 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
工程售后服务方案
2014/06/08 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
考试后的感想
2015/08/07 职场文书
员工聘用合同范本
2015/09/21 职场文书