opencv-19 图像色彩空间转换函数cv2.cvtColor()

cv2.cvtColor() 函数是 OpenCV 中用于图像颜色空间转换的函数。它允许你将图像从一个色彩空间转换为另一个色彩空间。在 Python 中,你可以使用这个函数来实现不同色彩空间之间的转换。

函数的基本语法为:

cv2.cvtColor(src, code[, dst[, dstCn]])

参数说明:

src:输入图像,可以是 NumPy 数组或 OpenCV 中的 Mat 对象。
code:颜色空间转换代码,表示目标色彩空间。可以使用 OpenCV 中的 cv2.COLOR_* 常量来指定,如 cv2.COLOR_BGR2GRAY 表示将 BGR 彩色图像转换为灰度图像。
dst:可选参数,输出图像,可以是 NumPy 数组或 Mat 对象。如果未提供,将会创建一个新的图像来保存转换后的结果。
dstCn:可选参数,目标图像的通道数。默认值为 0,表示与输入图像通道数保持一致。

枚举值表:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里需要注意,BGR 色彩空间与传统的 RGB 色彩空间不同。对于一个标准的 24 位位图,
BGR 色彩空间中第 1 个 8 位(第 1 个字节)存储的是蓝色组成信息(Blue component),第 2
个 8 位(第 2 个字节)存储的是绿色组成信息(Green component),第 3 个 8 位(第 3 个字节)
存储的是红色组成信息(Red component)。同样,其第 4 个、第 5 个、第 6 个字节分别存储蓝色、绿色、红色组成信息,以此类推。
颜色空间的转换都用到了如下约定:
 8 位图像值的范围是[0,255]。
 16 位图像值的范围是[0,65 535]。
 浮点数图像值的范围是[0.0~1.0]。

对于线性转换来说,这些取值范围是无关紧要的。但是对于非线性转换来说,输入的 RGB图像必须归一化到其对应的取值范围内,才能获取正确的转换结果。

例如,对于 8 位图,其能够表示的灰度级有 28=256 个,也就是说,在 8 位图中,最多能表示 256 个状态,通常是[0,255]之间的值。但是,在很多色彩空间中,值的范围并不恰好在[0,255]
范围内,这时,就需要将该值映射到[0,255]内。

例如,在 HSV 或 HLS 色彩空间中,色调值通常在[0,360)范围内,在 8 位图中转换到上述色彩空间后,色调值要除以 2,让其值范围变为[0,180),以满足存储范围,即让值的分布位于8 位图能够表示的范围[0,255]内。

又例如,在 CIELab*色彩空间中,a 通道和 b 通道的值范围
是[−127,127],为了使其适应[0,255]的范围,每个值都要加上 127。
不过需要注意,由于计算过程存在四舍五入,所以转换过程并不是精准可逆的。
下面使用像素数组来观察转换效果

import cv2
import numpy as np
img=np.random.randint(0,256,size=[2,4,3],dtype=np.uint8)
rst=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
print("img=\n",img)
print("rst=\n",rst)print(img[1,0,0],img[1,0,1],img[1,0,2])print("像素点(1,0)直接计算得到的值=",img[1,0,0]*0.114+img[1,0,1]*0.587+img[1,0,2]*0.299)
print("像素点(1,0)使用公式 cv2.cvtColor()转换值=",rst[1,0])

结果如下:

img=[[[ 25  17 215][157  31  16][ 62  30  87][ 95 210 182]][[115 165 251][116  21  65][116  55 246][150  78  61]]]
rst=[[ 77  41  51 189][185  45 119  81]]
115
165
251
像素点(1,0)直接计算得到的值= 185.01399999999998
像素点(1,0)使用公式 cv2.cvtColor()转换值= 185

像素点(1,0)直接计算得到的值= 185.01399999999998
像素点(1,0)使用公式 cv2.cvtColor()转换值= 185

OpenCV 中,灰度图像是按照行列直接存储的。而 BGR 模式的图像会依次将它的 B 通道、G 通道、R 通道中的像素点,以行为单位按照顺序存储在 ndarray 的列中。例如,有大小
为 R 行×C 列的 BGR 图像,其存储方式如图 4-2 所示。
当图像由 RGB 色彩空间转换到 GRAY 色彩空间时,其处理方式如下:

Gray = 0.299 · 𝑅 + 0.587 · 𝐺 + 0.114 · B

在本例中,各个像素点的像素值如下:
 原始图像 BGR 图像内第 1 行第 0 列上的 B 通道像素点的值为 img[1,0,0]=115。
 原始图像 BGR 图像内第 1 行第 0 列上的 G 通道像素点的值为 img[1,0,1]=165。
 原始图像 BGR 图像内第 1 行第 0 列上的 R 通道像素点的值为 img[1,0,2]=251

在这里插入图片描述

计算结果为 185.0139。目标图像是灰度图像,是 8 位图像,值是位于[0,255]之间的无符号整数。所以,要将上述小数结果进行四舍五入,得到 185,并将它作为目标灰度图像内 rst[1,0]的像素值。

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

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

相关文章

leetcode5. 最长回文子串(Manacher - java)

Manacher回文算法 leetcode5. 最长回文子串Manacher 算法 manacher 算法 leetcode5. 最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s “…

NestJS 的 中间件 学习

基本概念 中间件是在路由处理程序之前调用的函数。中间件函数可以访问请求和响应对象。在程序中我们可以让多个中间件串起来一起使用,当多个中间件一起使用时我们可以使用next()调用下一个中间件。 中间件主要是可以实现如下功能: 执行任何代码更改请…

CentOS7.9.离线安装Docker

CentOS 7上离线安装Docker 下载适用于CentOS 7的Docker安装包: https://download.docker.com/linux/static/stable/x86_64/将下载的 docker-24.0.4.tgz 文件上传到CentOS 7系统。例如,可以上传到 /root 目录下。 解压 docker-24.0.4.tgz 文件&#xff…

搭建关键字驱动自动化测试框架

前言 上篇文章我们已经了解到了数据驱动自动化测试框架是如何构建和驱动测试的!那么这篇文章我们将了解关键字驱动测试又是如何驱动自动化测试完成整个测试过程的。关键字驱动框架是一种功能自动化测试框架,它也被称为表格驱动测试或者基于动作字的测试…

Windows10 下 Neo4j1.5.8 安装教程

前言 Neo4j 是一个高性能的、NOSQL 图形数据库,它将结构化数据存储在网络上而不是表中。基于磁盘的、具备完全的事务特性的 Java 持久化引擎,这里就不把他和常用关系型数据库做对比了。因为篇幅有限,我这里也是第一次使用,所以以…

elasticsearch报错问题

标题1.报错问题 标题2.新建一个配置类 package cn.itcast.hotel.config;import org.apache.http.HttpHost; import org.apache.http.client.config.RequestConfig; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestClientBuilder; import o…

【Linux】Tcp协议的通讯流程,浅谈三次握手四次挥手

文章目录 Tcp协议的通讯流程一、协议定制与网络版计算器的实现二、json的使用总结 Tcp协议的通讯流程 上一篇文章我们讲解了如何实现Tcp服务器,Tcp的接口也用了,下面我们就看一下Tcp协议的通讯流程: 在服务端,我们首先要创建一个…

电脑C盘空间大小调整 --- 扩容(扩大/缩小)--磁盘分区大小调整/移动

概述: 此方法适合C盘右边没有可分配空间(空闲空间)的情况,D盘有数据不方便删除D盘分区的情况下,可以使用傲梅分区助手软件进行跨分区调整分区大小,不会损坏数据。反之可直接使用系统的磁盘管理工具进行调整…

Flutter学习—— Vscode创建项目

目录 一、Vscode创建项目 二、补充五种项目类型 Application: Module 模块开发, Package开发 Plugin 插件开发 Skeleton 骨架开发 一、Vscode创建项目 1.快捷键 CtrlShiftP 打开命令面板,选择新项目 2.选择需要开发的项目类型 Application 应用开…

39岁硕士找工作因年龄被卡?招聘单位否认

年龄限制问题在求职市场中是一个备受关注的话题。 近日,一位39岁的硕士徐先生在求职过程中遇到了年龄限制的问题,这一经历引发了人们对于年龄限制的探讨。 我们先来明确一下年龄限制的含义。 年龄限制是指在一些职业或领域中,对于应聘者的年龄…

Python代码片段之Django静态文件URL的配置

首先要说明这段python代码并不完整,而且我也没有做过测试,只是我在工作时参考了其中的一些个方法。这是我在找python相关源码资料里看到的一段代码,是Django静态文件URL配置代码片段2,代码中有些方法还是挺技巧的,做其…

Tomcat 的使用(图文教学)

Tomcat 的使用(图文教学) 前言一、什么是Tomcat?二、Tomcat 服务器和 Servlet 版本的对应关系三、Tomcat 的使用1、安装2、目录介绍3、如何启动4、Tomcat 的停止5、如何修改 Tomcat 的端口号6、如何部暑 web 工程到 Tomcat 中6.1 方式一6.2 …

红队打靶:Nullbyte打靶思路详解(vulnhub)

目录 写在开头 第一步:主机发现与端口扫描 第二步:Web渗透 第三步:hydra密码爆破 第四步:SQL注入大赏 方法一:手工SQL注入之联合查询 方法二:SQL注入写入一句话木马 方法三:SQL注入写入…

C语言学习笔记 VScode设置C环境-06

目录 一、下载vscode软件 二、安装minGW软件 三、VS Code安装C/C插件 3.1 搜索并安装C/C插件 3.2 配置C/C环境 总结 一、下载vscode软件 在官网上下载最新的版本 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/download 二、安装minGW…

测试覆盖率 JVM 字节码测试运用 - 远程调试、测试覆盖、影子数据库

目录 前言: 简介 基础使用方式介绍 工具特性 前言: 在软件开发中,测试覆盖率是一个非常重要的指标,它表示代码中所有的测试用例是否都已经被覆盖到。JVM 字节码测试是一种比较新的测试方法,它可以对 JVM 字节码进…

托管和非托管 Kubernetes 管理平台详解(第一部分)

托管和非托管 Kubernetes 管理平台分别有哪些优势和不足?我们将通过两篇文章进行详细介绍,帮助您选择更适合自身需求的平台。 首先,让我们了解一下托管的 Kubernetes 管理平台(KMP)。 托管的 KMP 托管 Kubernetes 管…

FFMPEG源码之ffmpeg.c解析

重要函数解析 main()ffmpeg_parse_options()transcode() main() int main(int argc, char **argv) {int ret;BenchmarkTimeStamps ti;/* 初始化动态加载 */init_dynload();/* 注册退出回调函数 */register_exit(ffmpeg_cleanup);/* 设置stderr的缓冲模式(win32运行…

【运动规划算法项目实战】TABV代码解析(五):plan_manage

文章目录 前言一、FastPlannerManager.h1.1 成员变量:二、KinoReplanFSM.h2.1 成员变量2.2 方法三、plan_container.hpp3.1 成员变量:3.2 实现方法:四、backward.hpp五、fast_planner_node.cpp六、kino_replan_fsm.cpp七、planner_manager.cpp八、traj_server.cpp九、总结前言…

nlp系列(6)文本实体识别(Bi-LSTM+CRF)pytorch

模型介绍 LSTM:长短期记忆网络(Long-short-term-memory),能够记住长句子的前后信息,解决了RNN的问题(时间间隔较大时,网络对前面的信息会遗忘,从而出现梯度消失问题,会形成长期依赖…

Elasticsearch 一段时间后出现 SocketTimeoutException的问题

java springboot 使用ES客户端连接 一段时间闲置后,首次调用es命令会报SocketTimeOutException问题,再次调用不会报错 问题出现原因: Elasticsearch 客户端会根据服务器返回的HTTP报文内容,来决定客户端保持HTTP连接Keep-Alive…