OpenCV官方教程中文版 —— 2D 直方图

news2025/1/13 7:59:47

OpenCV官方教程中文版 —— 2D 直方图

  • 前言
  • 一、介绍
  • 二、OpenCV 中的 2D 直方图
  • 三、Numpy 中 2D 直方图
  • 四、绘制 2D 直方图

前言

本节我们会学习如何绘制 2D 直方图,我们会在下一节中使用到它。

一、介绍

在前面的部分我们介绍了如何绘制一维直方图,之所以称为一维,是因为我们只考虑了图像的一个特征:灰度值。但是在 2D 直方图中我们就要考虑两个图像特征。对于彩色图像的直方图通常情况下我们需要考虑每个的颜色(Hue)和饱和度(Saturation)。根据这两个特征绘制 2D 直方图。

OpenCV 的官方文档中包含一个创建彩色直方图的例子。本节就是要和大家一起来学习如何绘制颜色直方图,这会对我们下一节学习直方图投影有所帮助

二、OpenCV 中的 2D 直方图

使用函数 cv2.calcHist() 来计算直方图既简单又方便。如果要绘制颜色直方图的话,我们首先需要将图像的颜色空间从 BGR 转换到 HSV。(记住,计算一维直方图,要从 BGR 转换到 HSV)。计算 2D 直方图,函数的参数要做如下修改:

• channels=[0,1] 因为我们需要同时处理 H 和 S 两个通道。

• bins=[180,256] H 通道为 180,S 通道为 256。

• range=[0,180,0,256] H 的取值范围在 0 到 180,S 的取值范围在 0 到 256。

代码如下:

# -*- coding: utf-8 -*-
import cv2
img = cv2.imread('home.png')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])

三、Numpy 中 2D 直方图

Numpy 同样提供了绘制 2D 直方图的函数:np.histogram2d()。(还记得吗,绘制 1D 直方图时我们使用的是 np.histogram())。

# -*- coding: utf-8 -*-
import cv2
import numpy as np
img = cv2.imread('home.png')
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
h, s, v = cv2.split(hsv)
hist, xbins, ybins = np.histogram2d(h.ravel(),s.ravel(),[180,256],[[0,180],[0,256]])

第一个参数是 H 通道,第二个参数是 S 通道,第三个参数是 bins 的数目,第四个参数是数值范围。
现在我们要看看如何绘制颜色直方图。

四、绘制 2D 直方图

方法 1:使用 cv2.imshow() 我们得到结果是一个 180x256 的两维数组。所以我们可以使用函数 cv2.imshow() 来显示它。但是这是一个灰度图,除非我们知道不同颜色 H 通道的值,否则我们根本就不知道那到底代表什么颜色。

方法 2:使用 Matplotlib() 我们还可以使用函数 matplotlib.pyplot.imshow()来绘制 2D 直方图,再搭配上不同的颜色图(color_map)。这样我们会对每个点所代表的数值大小有一个更直观的认识。但是跟前面的问题一样,你还是不知道那个数代表的颜色到底是什么。虽然如此,我还是更喜欢这个方法,它既简单又好用。

注意:在使用这个函数时,要记住设置插值参数为 nearest。

代码如下:

b, g, r = cv2.split(img)
img2 = cv2.merge([r,g,b])
plt.figure()
plt.subplot(121)
plt.imshow(img2, interpolation='bicubic')
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.subplot(122)
hist = cv2.calcHist([hsv], [0, 1], None, [180, 256], [0, 180, 0, 256])
plt.imshow(hist, interpolation='nearest')
plt.show()

下面是输入图像和颜色直方图。X 轴显示 S 值,Y 轴显示 H 值。
在这里插入图片描述
在直方图中,你可以看到在 H=100,S=100 附近有比较高的值。这部分与天的蓝色相对应。同样另一个峰值在 H=25 和 S=100 附近。这一宫殿的黄色相对应。你可用通过使用图像编辑软件(GIMP)修改图像,然后在绘制直方图看看我说的对不对。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1137216.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TeamViewer

爱情就像两个拉皮筋的人,受伤的总是不愿放手的那一个! TeamViewer – 远程连接软件 点击下载 电脑版就下载电脑 安卓版就下载安卓 苹果版就下苹果

bug:Chrome插件SwitchyOmega安装时程序包无效:“CRX_HEADER_INVALID“问题

bug:Chrome插件SwitchyOmega安装时程序包无效:“CRX_HEADER_INVALID“问题 1 解决 先说解决办法: 将下载的crx重命名为xxx.zip,然后解压打开chrome的开发者模式 点击加载已解压的应用程序,然后选择我们解压后的文件夹即可 安装成…

MyBatisPlus自动填充

文章目录 MyBatisPlus自动填充应用场景在实体类里面规定要填充的字段写处理器测试 MyBatisPlus自动填充 应用场景 我们往数据库里面插入一条记录,或者是更新一条记录的时候,往往需要有插入时间和更新时间,如果每条sql语句里面都这样写&…

Spring使用注解进行注入

目录 前言 一、属性注入 1.1 属性注入的优缺点分析 二、Setter注入 2.1 Setter注入优缺点分析 三、构造方法注入 3.1 构造注入的优缺点 四、Qualifier注解 五、Resource注解 六、Resource注解与Autowired注解的区别 前言 在之前我们就已经了解过了Spring依赖注入的方式&#x…

word页脚设置,页脚显示第几页共有几页设置步骤

word页脚设置,页脚显示第几页共有几页设置步骤: 具体步骤: 步骤1: 步骤1.1选择页脚---空白页脚 步骤1.2,在"[在此处键入]",直接输入你需要的格式,如 “第页/共页” 步骤1.3选择第“…

基于ssm服装购物系统

功能如图所示 摘要 基于SSM框架的服装购物系统研究在当今数字化时代具有更为广泛的重要意义。首先,电子商务已成为商业领域的重要发展方向,尤其在全球范围内,服装零售商面临着不断增长的在线购物需求。这种研究能够帮助服装零售商迅速适应市场…

Failed to prepare the device for development

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…

班级管理神器

哈喽,亲爱的小红书教育朋友们!今天来分享一个重磅好物:班级查询系统!是的,你没有听错,让我们的孩子们告别信息混乱,告别手动统计,迎接高效、智能的班级管理新时代! 班级查…

appium+selenium自动化测试UI踩坑记录之--判断元素是否存在

判断应用程序元素是否存在,之前使用的代码如下,但是页面跳转后,通过xpath查找信息能查找到跳转前页面的内容,造成信息判断不准确。 # 从selenium.common.exceptions 模块导入 NoSuchElementException类from selenium.common.excep…

mysql主从搭建(gtid)

搭建mysql主从使用三台主机,主机信息如下 ip端口主机名角色10.1.60.803306rabbitmq04salve10.1.60.1143306rabbitmq01slave10.1.60.1153306rabbitmq02master 为每台主机修改主机名并配置hosts hostnamectl set-hostname rabbitmq04 vi /etc/hosts 10.1.60.114 …

【飞控调试】无人机电调哔-哔-哔-哔-哔...发出急促的响声

硬件 飞控:Pixhawk 6C mini 电调:好盈hobbywing Platinum 40A 固件:PX4 V1.13.3 问题 电调上电后,电机发出哔-哔-哔-哔-哔…发出急促的响声,进行电调校准也没用。 解决 在QGC里把SYS_USE_IO参数改成Disabled&…

Hyperledger Fabric搭建测试网络

本文使用的Fabric版本:V2.5.4 Ubuntu系统:16.04LTS 前序文章已经详细介绍了如何安装部署Hyperledger Fabric系统,这里不再赘述。本篇文章主要介绍如何使用Fabric的测试网络。在正式开始之前,有一点需要说明: Hyperled…

IndexError: Target 34 is out of bounds.

问题出现在训练用的标签处,标签超过范围,换了数据集后标签数发生改变,总而言之是目标分类数量超过了你所设置的标签数量的范围,归根结底是全连接参数没有改过来。找到label位置改一下数量

C# 图解教程 第5版 —— 第8章 类和继承

文章目录 8.1 类继承8.2 访问继承的成员(*)8.3 所有类都派生自 object 类8.4 屏蔽基类的成员8.5 基类访问8.6 使用基类的引用8.6.1 虚方法和覆写方法8.6.2 覆写标记为 override 的方法8.6.3 覆盖其他类型成员(*) 8.7 构造函数的执…

2011-2021年“第四期”数字普惠金融指数与上市公司匹配(根据省份匹配)/上市公司数字金融指数匹配

2011-2021年“第四期”数字普惠金融指数与上市公司匹配(根据省份匹配)/上市公司数字金融指数匹配 1、时间:2011-2021年 2、指标:股票代码、年份、行政区划代码、行业名称 、行业代码、所属省份、数字普惠金融指数、覆盖广度、使…

嵌入式学习5大误区,你中招了吗?

目录 误区1:错把自己当稚晖君 误区2:错误的学习方法 误区3:忽略时间成本 误区4:缺乏系统思维 误区5:追求完美主义 误区1:错把自己当稚晖君 稚晖君能够以一己之力创造一个个惊艳的产品,离不…

代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球

代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球 文章链接:柠檬水找零 根据身高重建队列 用最少数量的箭引爆气球 视频链接:柠檬水找零 根据身高重建队列 …

StarRocks 荣获 InfoWorld 2023 年最佳开源软件

近日,InfoWorld 公布了 2023 Bossie Awards 获奖名单,StarRocks 作为数据分析领域的明星项目,光荣入列。 InfoWorld 是一家具有全球影响力的信息技术媒体公司,每年都会根据软件对开源界的贡献,发布 Bossie Awards 榜单…

【Javascript】函数返回值的作用

目录 返回值 中断函数 只能写在函数体里面 返回值 function a(){var b3;return b3? 4:5;} console.log(a()); 创建一个函数,给b赋值3, return b3? 4:5; 判断b是不是等于3,如果是就返回4, 如果不是就返回5 中断函数…

JSON数据

一、JSON介绍 Android应用程序界面上的数据信息大部分都是通过网络请求从服务器上获取到的,获取到的数据类型常见的就是JSON。JSON是一种新的数据格式,这种格式的数据不可以直接显示到程序的界面上,需要将该数据解析为一个集合或对象的形式才…