opencv(4):颜色空间

文章目录

  • 颜色空间
    • 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.mfbz.cn/a/159422.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电子学会C/C++编程等级考试2021年09月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字判断 输入一个字符,如何输入的字符是数字,输出yes,否则输出no 输入 一个字符 输出 如何输入的字符是数字,输出yes,否则输出no 样例1输入 样例1输入 5样例1输出 yes样例2输入 A 样例2输出 …

软件质量保护与测试(第2版)学习总结第十一章 白盒测试

错误隐藏在角落里、集聚在边界处 ----Boris Beizer 白盒测试是看源代码的,静态分析和动态分析 11.2 控制流测试 程序结构主要有3种 顺序结构、分支结构、循环结构 #include "stdafx.h" …

今天遇到Windows 10里安装的Ubuntu(WSL)的缺点

随着技术的发展,越来越多开发者转向使用 Windows Subsystem for Linux(WSL)在 Windows 10 上进行开发,也就是说不用虚拟机,不用准备多一台电脑,只需要在Windows 10/11 里安装 WSL 就能体验 Linux 系统。因此…

CTFhub-RCE-过滤目录分隔符 /

根据源代码信息可知&#xff0c;过滤掉了/ <?php $res FALSE; if (isset($_GET[ip]) && $_GET[ip]) { $ip $_GET[ip]; $m []; if (!preg_match_all("/\//", $ip, $m)) { $cmd "ping -c 4 {$ip}"; exec($cmd,…

使用vant list实现订单列表,支持下拉加载更多

在公司项目开发时&#xff0c;有一个需求是实现可以分页的订单列表&#xff0c;由于是移动端项目&#xff0c;所以最好的解决方法是做下拉加载更多。 1.在页面中使用vant组件 <van-listv-model"loading":finished"finished"finished-text"没有更…

SpringMVC 进阶

SpringMVC 进阶 一、拦截器 SpringMVC 中 Interceptor 拦截器的主要作⽤是拦截⽤⼾的请求并进⾏相应的处理。⽐如通过它来进⾏权限验证&#xff0c;或者是来判断⽤⼾是否登陆等操作。对于 SpringMVC 拦截器的定义⽅式有两种&#xff1a; 实现接⼝&#xff1a;org.springfram…

C语言——冒泡排序

一、冒泡排序是什么 冒泡排序&#xff1a; 冒泡排序(Bubble Sort)&#xff0c;又被称为气泡排序或泡沫排序。升序时&#xff1a;它会遍历若干次需要排序的数列&#xff0c;每次遍历时&#xff0c;它都会从前往后依次的比较相邻两个数的大小&#xff1b;如果前者比后者大&#x…

黔院长 | 何为风邪?

中医上所说的风&#xff0c;也称风邪&#xff0c;是指受到外界侵犯&#xff08;外邪&#xff09;而感得风寒、风热、风湿等症状&#xff0c;导致人的免疫力下降。寒、湿、燥、暑、热等都属于外邪&#xff0c;多依附于风而入侵人体&#xff0c;因此风邪更多的是指一种致病因素。…

pythom导出mysql指定binlog文件

要求 要求本地有py环境和全局环境变量 先测试直接执行binlog命令执行命令 Windows 本地直接执行命令 # E:\output>E:\phpstudy_pro\Extensions\MySQL5.7.26\bin\mysqlbinlog binglog文件地址 # --no-defaults 不限制编码 # -h mysql链接地址 # -u mysql 链接名称 # -p m…

如何制作keil5的Device pack

概述&#xff1a; 作为一名嵌入式芯片相关行业人员&#xff0c;我们经常需要使用到Device pack, 比如STM32的pack如下图所示&#xff1a; 名词DFP&#xff1a; 设备家族包 DFP Pack组成&#xff1a; Boards (板级支持)Device &#xff08;芯片设备级支持&#xff09;Docum…

CI/CD 持续集成与持续交付(1)

git Git git使用 [rootserver1 ~]# yum install -y git [rootserver1 ~]# mkdir demo [rootserver1 ~]# cd demo/初始化版本库 [rootserver1 demo]# git init查看状态 [rootserver1 demo]# git status [rootserver1 demo]# git status -s #简化输出[rootserver1 demo]# echo…

第十一周任务总结

本周任务总结 本周物联网方面主要继续进行网关的二次开发与规则引擎实现设备联动的实现 非物联网方面主要复习了docker的使用与算法的学习 1.网关的二次开发&#xff0c;本周将实现debug调试输出的文件下载到了网关&#xff0c;但网关出了问题无法连接&#xff0c;最终跟客服…

SmartX 超融合 5.1 版本有哪些新特性和技术提升?

近日&#xff0c;SmartX 正式发布了超融合产品组合 SmartX HCI 5.1 版本&#xff0c;以全面升级的超融合软件、分布式块存储、容器管理与服务、软件定义的网络与安全等组件&#xff0c;为虚拟化和容器负载在计算、存储、网络和管理层面提供统一的架构和生产级别的能力支持。本期…

ArcGIS Maps SDK for JS:监听图层的visible属性

文章目录 1 问题描述2 解决方案3 拓展 1 问题描述 近期有这么一个需求。在 ArcGIS Maps SDK for JavaScript 中&#xff0c;使用图层的visible属性同步显示某个组件&#xff0c;即打开图层时显示组件&#xff0c;关闭图层时隐藏组件。 首先想到的是&#xff0c;通过点击图层列…

B站批量取消关注

找到关注页面&#xff1a; 右键检查或者按F12进入开发者界面 然后选console&#xff0c;在页面下面输入下面jQuery代码&#xff0c;然后按回车。复制粘贴两次这一页的博主就能全部取消大概20个 然后刷新页面&#xff0c;接着粘贴两边代码&#xff0c;循环如此即可。 $(".…

kubernetes集群编排——k8s高可用集群

实验环境 主机名 IP 角色 k8s1 192.168.92.11 harbor k8s2 192.168.92.12 control-plane k8s3 192.168.92.13 control-plane k8s4 192.168.92.14 control-plane k8s5 192.168.92.15 haproxy,pacemaker k8s6 192.168.92.16 haproxy,pacemaker k8s7 192.16…

duplicate复制数据库单个数据文件复制失败报错rman-03009 ora-03113

duplicate复制数据库单个数据文件复制失败报错rman-03009 ora-03113 搭建dg过程中&#xff0c;发现有一个数据文件在复制过程中没有复制过来&#xff0c;在备库数据文件目录找不到这个数据文件 处理方法&#xff1a; 第一步&#xff1a;主库备份86#数据文件 C:\Users\Admi…

【0235】修改私有内存(private memory)中的MyBEEntry时,st_changecount值前后变化

上一篇: 【0234】PgBackendStatus 记录当前postgres进程的活动状态 1. pg_stat_activity中xxx实时信息如何实现? 客户端(eg:psql)在连接上postmaster之后,postmaster守护进程会fork()一个后端进场(backend process),之后此客户端的所有操作、交互均有此对应的Backen…

实验七 状态机及键盘输入 chisel

题目 请设计一个区别两种特定时序的有限状态机FSM&#xff1a;该有限状态机有一个输入w和一个输出z。当w是4个连续的0或4个连续的1时&#xff0c;输出z1&#xff0c;否则z0&#xff0c;时序允许重叠。即&#xff1a;若w是连续的5个1时&#xff0c;则在第4个和第5个时钟之后&am…

Qt HTTP 摘要认证(海康球机摄像机ISAPI开发)

接到一个需求是开发下海康的球机,控制云台,给到我的是一个开发手册,当然了是海康的私有协议 ISAPI开发手册https://download.csdn.net/download/qq_37059136/88547425关于开发这块读文档就可以理解了,海康使用的是摘要认证,当然了海康已经给出使用范例 通过libcurl就可以直接连…
最新文章