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在linux系统下获取系统内存使用情况的方法
May 11 Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
Python continue继续循环用法总结
Jun 10 Python
python监控进程状态,记录重启时间及进程号的实例
Jul 15 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
Pytorch训练过程出现nan的解决方式
Jan 02 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
结束运行python的方法
Jun 16 Python
Python接口自动化测试的实现
Aug 28 Python
python实现图片素描效果
Sep 26 Python
Python下opencv库的安装过程及问题汇总
Jun 11 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
基于mysql的论坛(4)
2006/10/09 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
Javascript中的几种URL编码方法比较
2015/01/23 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
Node.js返回JSONP详解
2016/05/18 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
BootStrap入门教程(一)之可视化布局
2016/09/19 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
2021/01/27 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
JavaScript运动原理基础知识详解
2020/04/02 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
详解Python的Django框架中的模版继承
2015/07/16 Python
Zookeeper接口kazoo实例解析
2018/01/22 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
Python3中详解fabfile的编写
2018/06/24 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
python按修改时间顺序排列文件的实例代码
2019/07/25 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
Keras搭建自编码器操作
2020/07/03 Python
应聘医药代表职位求职信
2013/10/21 职场文书
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
竞选学委演讲稿
2014/09/13 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
辞职信标准格式
2015/02/27 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python