opencv(4):颜色空间

news2024/10/7 6:38:03

文章目录

  • 颜色空间
    • RGB 人眼的色彩空间
    • HSV 色彩空间
    • HSL
    • YUV
      • YUV420:
      • YUV422:
      • YUV444:
    • 颜色空间转换代码示例

颜色空间

不同色彩空间显示效果是不一样的。

RGB 人眼的色彩空间

HSV 色彩空间

HSV 代表色相(Hue)、饱和度(Saturation)、明度(Value),这三个分量描述了颜色的不同方面:

  • 色相(Hue): 表示颜色的种类,以角度度量(0°到360°)。常见的颜色如红、绿、蓝等都有特定的色相值。
  • 饱和度(Saturation): 表示颜色的纯度或灰度。饱和度为0时,颜色变成灰度,为1时,颜色是完全饱和的。
  • 明度(Value): 表示颜色的明亮程度。数值范围从0到1,其中0代表黑色,1代表最亮的颜色。

opencv 倾向于使用 hsv.

import cv2
import numpy as np

# 读取图像
image = cv2.imread('example.jpg')

# 将图像从 BGR 转换为 HSV
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

HSL

HSL 是另一种颜色空间,表示颜色的方式与 RGB 和 HSV 略有不同。HSL 代表色相(Hue)、饱和度(Saturation)、亮度(Lightness),这三个分量描述了颜色的不同方面:

  • 色相(Hue): 表示颜色的种类,以角度度量(0°到360°)。HSL 色相与 HSV 色相是相同的。
  • 饱和度(Saturation): 表示颜色的纯度或灰度。饱和度为0时,颜色是灰度的,为1时,颜色是完全饱和的。
  • 亮度(Lightness): 表示颜色的相对亮度。数值范围从0到1,其中0代表黑色,0.5是中间的灰度,1代表最亮的颜色。

在这里插入图片描述

HSL 色彩空间同样常用于图像处理和计算机视觉任务中。在 OpenCV 中,你同样可以使用 cv2.cvtColor 函数将图像从其他颜色空间(如 BGR)转换为 HSL。
HSL 用的比较少。

YUV

主要用在视频中。
YUV 是一种将亮度(Luminance)和色度(Chrominance)分离的颜色编码方式,常用于视频压缩和图像处理。YUV 的表示方式包括 Y、U、V 三个分量:

  • Y(亮度): 表示图像的亮度信息,即灰度信息。Y 分量用于表示黑白图像的亮度,与 RGB 的灰度表示类似。
  • U(蓝色色度): 表示蓝色的色度信息。U 分量描述了图像中蓝色和黄色的变化。在 YUV 中,U 分量越大,蓝色越强,越小则黄色越强。
  • V(红色色度): 表示红色的色度信息。V 分量描述了图像中红色和绿色的变化。在 YUV 中,V 分量越大,红色越强,越小则绿色越强。

YUV 主要应用于视频编码和传输领域,其中 Y 分量用于表示亮度信息,而 U 和 V 分量则用于表示颜色信息。通过将颜色信息与亮度信息分离,可以更有效地进行压缩,因为人眼对亮度的感知更为敏感,而对颜色的感知相对较弱。

在 OpenCV 中,你可以使用 cv2.cvtColor 函数将图像从其他颜色空间(如 BGR)转换为 YUV。例如:

import cv2
import numpy as np
# 读取图像
image = cv2.imread('example.jpg')
# 将图像从 BGR 转换为 YUV
yuv_image = cv2.cvtColor(image, cv2.COLOR_BGR2YUV)

YUV420、YUV422、YUV444 是 YUV 颜色编码的不同变体,它们主要区别在于亮度(Y)和色度(U、V)分量的采样方式和存储结构。

YUV420:

采样方式: Y 分量进行全采样,而 U 和 V 分量进行水平和垂直方向的子采样。通常是 4:2:0 的采样方式,表示每 4 个 Y 值对应 2 个 U 和 2 个 V 值。
存储结构: 以块为单位存储,每个块中包含多个 Y、U、V 像素。Y 采样密集,而 U 和 V 采样相对稀疏。这是最常用于视频压缩的一种格式。

YUV422:

采样方式: Y 分量进行全采样,而 U 和 V 分量进行水平方向的子采样。通常是 4:2:2 的采样方式,表示每 4 个 Y 值对应 2 个 U 和 2 个 V 值。
存储结构: 类似 YUV420,以块为单位存储,但 U 和 V 采样略为密集,相对于 YUV420,存储要求更高。

YUV444:

采样方式: Y、U、V 分量均进行全采样,没有子采样。每个 Y、U、V 都有一个对应的采样值。
存储结构: 每个像素都有对应的 Y、U、V 值,存储密集。这是最高质量的 YUV 变体,但也需要更多的存储空间。
这些变体在视频压缩和传输中具有不同的应用场景。YUV420 常用于广播电视和视频流,因为它在保持相对较高图像质量的同时,能够更有效地压缩数据。YUV444 则通常用于图像和视频编辑等对图像质量要求较高的场景。

颜色空间转换代码示例

import cv2

def callback(userdata):
    pass
cv2.namedWindow('color', cv2.WINDOW_NORMAL)
img = cv2.imread('./RMB.jpeg')
colorspaces = [cv2.COLOR_BGR2RGBA, cv2.COLOR_BGR2BGRA, 
               cv2.COLOR_BGR2GRAY, cv2.COLOR_BGR2HSV, 
               cv2.COLOR_BGR2YUV]
cv2.createTrackbar('curcolor', 'color', 0, 4, callback)
while True:
    index = cv2.getTrackbarPos('curcolor', 'color')
    #颜色空间转换API
    cvt_img = cv2.cvtColor(img, colorspaces[index])
    cv2.imshow('color', cvt_img)
    key = cv2.waitKey(10)
    print(key)
    if key & 0xFF == ord('q'):
        break
cv2.destroyAllWindows()

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

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

相关文章

YOLO改进系列之注意力机制(EffectiveSE模型介绍)

模型结构 ESE(Effective Squeeze and Extraction) layer是CenterMask模型中的一个block,基于SE(Squeeze and Extraction)改进得到。与SE的区别在于,ESE block只有一个fc层,(CenterMask : Real-Time Anchor-Free Insta…

2019年12月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 以下程序执行后,角色面向的方向是? A:右上 B:右下 C:左上 D:左下 答案:B 面向-135度,是面向左下角,向右旋转-90度等于向左旋转90度。所以会旋转到右下角。 第2题 以下程…

WordPress网站迁移实战经验

前几日,网站服务器到期,换了服务商,就把我的WordPress的网站迁移到本地电脑了。方便以后文章迁移。 本次迁移网站主要经历以下几个步骤。 1.域名转出。 2.备份数据库及网站文件下载。 3.重新搭建WordPress网站。 4.网站文件及数据库导入。 下面详细介绍下每个步骤的操作…

基于STC12C5A60S2系列1T 8051单片的IIC总线器件数模芯片PCF8591实现数模转换应用

基于STC12C5A60S2系列1T 8051单片的IIC总线器件数模芯片PCF8591实现数模转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍IIC总线器件数模芯片PCF8591介绍通过按…

RabbitMQ 安装及配置

前言 当你准备构建一个分布式系统、微服务架构或者需要处理大量异步消息的应用程序时,消息队列就成为了一个不可或缺的组件。而RabbitMQ作为一个功能强大的开源消息代理软件,提供了可靠的消息传递机制和灵活的集成能力,因此备受开发人员和系…

CMakeLists.txt基础指令与cmake-gui生成VS项目的步骤

简介 本博客主要介绍cmake的基本指令,同时,很多使用Visual Studio小白从Gitbub下载项目源码后,看到CMakeLists.txt,不知道如何使用Visual Studio编译源码;针对以上问题,做一下简单操作与解释,方…

各类好玩免费API推荐,早知道就不用到处爬数据了...

啥是API/接口? 使用方法 API平台 淘宝/京东API接口数据 一些好玩的api 地图接口 天气查询接口 快递查询接口 笔记接口 其它接口 小结 啥是API/接口? 有些读者刚开始学习编程遇到API或者接口不太明白到底什么意思,没关系&#xff0…

Java项目实战《苍穹外卖》 一、项目概述

人道洛阳花似锦,偏我来时不逢春。 系列文章目录 苍穹外卖是黑马程序员2023年的Java实战项目,作为业余练手用,需要源码或者课程的可以找我,无偿分享 Java项目实战《苍穹外卖》 一、项目概述Java项目实战《苍穹外卖》 二、项目搭建 …

PyTorch - 高效快速配置 Conda + PyTorch 环境 (解决 segment fault )

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/134463035 在配置算法项目时,因网络下载速度的原因,导致默认的 conda 与 pytorch 包安装缓慢,需要配置新的 co…

使用VMware安装linux虚拟机

文章目录 一、介绍二、下载VMware三、下载centOS镜像文件四、新建虚拟机1. 选择配置类型2. 安装centOS操作系统3. 命名4. 指定磁盘容量5. 虚拟机配置信息确认6. 稍后选择系统镜像 五、安装虚拟机1. 选择语言2. 设置时间、系统、以及yum源3. 开始安装4. 设置root用户密码5. 完成…

Angular菜单项激活状态保持

菜单项激活状态保持 需求描述详细需求 解决方案 需求描述 如果有个需求,让你实现一个导航栏,点击不同菜单,图表会有不同变化,页面刷新后,该菜单状态仍旧保持,实现方法如下: 例图,有…

中级程序员——vue3+js+git面试题

🙂博主:小猫娃来啦 🙂文章核心:vue3jsgit面试题 文章目录 vue3最大缺点和优点?vue3组合式里面,如何去调用子组件里面的方法?watch和watcheffect有什么区别?计算属性和watch的区别是什…

DOA估计算法——Capon算法

1.波速形成基本思想 在理解Capon算法之前,我们有必要先了解波束形成的基本思想以及原理到底是什么。这有助于我们更好的理解Capon算法的思想。 图 1 如图1展示了均匀阵列波束导向的示意图。图中wm表示加权值,波速形成(DBF)的基本思想就是将各阵元输出进…

5g路由器赋能园区无人配送车联网应用方案

随着人工智能、无人驾驶技术和自动化技术的不断进步,无人配送技术得到了极大的发展。园区内的物流配送任务通常是繁琐的,需要大量的人力资源和时间。无人配送技术能够提高配送效率并减少人力成本。无人配送车辆和机器人能够根据预定的路线和计划自动完成…

QT上位机串口控制MCU

🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 获取源码,添加WX 目录 前言1.…

做外贸如何开发客户?外贸客户开发六大方法一次性分享

客户是外贸业务的基础,有了客户才会有订单,因此开发客户永远是外贸人们重点关注的!那作为外贸小白要通过哪些渠道找到客户?有哪些外贸客户开发方法可以入手呢?今天就跟着东哥一起来了解一下外贸客户开发都有哪六个方法…

二百零二、Hive——Hive解析JSON字段(单个字段与json数组)

一、目的 用Flume采集Kafka写入到Hive的ODS层在HDFS路径下的JSON数据,需要在DWD层进行解析并清洗 (一)Hive的ODS层建静态分区外部表 create external table if not exists ods_queue(queue_json string ) comment 静态排队数据表——静…

CAN总线负载及CANoe查看总线负载率

文章目录 一、什么是CAN总线的负载率?二、负载率计算三、CANoe查看总线负载率 一、什么是CAN总线的负载率? 一般业内对负载率的定义为:实际数据传输速率和理论上能达到的数据传输速率的比值。 传输速率一般是按秒来计算,数据传输…

Shell编程基础(3)- Shell的位置参数

Shell编程基础(3)- Shell的位置参数 Shell Scripting Essentials (3) – Locative Parameters of Shell Scripting 前文介绍过shell变量。当声明shell变量时,只需要在代码行写出变量名称即可;在输入行用read命令要求用户输入,在…

链表(一)----关于单链表的一切细节这里都有

一.链表 1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 现实中的链表结构 数据结构中的链表结构 1.链式结构在逻辑上是连续的,但在物理上不一定是…