首页 > 其他分享 >opencv学习笔记04-色彩转换

opencv学习笔记04-色彩转换

时间:2023-06-01 22:24:31浏览次数:37  
标签:mat 04 COLOR cv2 笔记 opencv RGB 色彩

opencv 简易笔记 4--色彩转换

1.色彩空间的认识

色彩是人的眼睛对于不同频率的光线的不同感受,色彩既是客观存在的(不同频率的光)又是主观感知的,有认识差异。所以人类对于色彩的认识经历了极为漫长的过程,直到近代才逐步完善起来,但人类仍不能说对色彩完全了解并准确表述了,许多概念不是那么容易理解。“色彩空间”一词源于西方的“Color Space”,又称作“色域”,色彩学中,人们建立了多种色彩模型,以一维、二维、三维甚至四维空间坐标来表示某一色彩,这种坐标系统所能定义的色彩范围即色彩空间。我们经常用到的色彩空间主要有 RGB、CMYK、Lab 等。

1.1 HSV

HSV (色相 hue,饱和度 saturation, 明度 value), 也称 HSB (B 指 brightness) 是艺术家们常用的,因为与加法减法混色的术语相比,使用色相,饱和度等概念描述色彩更自然直观。HSV 是 RGB 色彩空间的一种变形,它的内容与色彩尺度与其出处——RGB 色彩空间有密切联系。

1.2 HSL

HSL (色相 hue, 饱和度 saturation,亮度 lightness/luminance), 也称 HLS 或 HSI (I 指 intensity) 与 HSV 非常相似,仅用亮度(lightness)替代了明度(brightness)。二者区别在于,一种纯色的明度等于白色的明度,而纯色的亮度等于中度灰的亮度.

1.3 RGB 与 RGBA

RGB 采用加法混色法,因为它是描述各种“光”通过何种比例来产生颜色。光线从暗黑开始不断叠加 产生颜色。 RGB 描述的是红绿蓝三色光的数值。RGBA 是在 RGB 上增加阿尔法通道实现透明效果。

2.opencv 中的色彩空间与示例

opencv 里面默认使用的是 BGR,而正常肉眼看到的色彩则是基于 RGB。

import cv2


def callback(any):
    pass


# 窗口命名
cv2.namedWindow("color", cv2.WINDOW_NORMAL)
colorspace = [
    cv2.COLOR_BGR2RGBA,
    cv2.COLOR_BGR2BGRA,
    cv2.COLOR_BGR2GRAY,
    cv2.COLOR_BGR2HSV_FULL,
    cv2.COLOR_BGR2YUV,
]
cv2.createTrackbar("curcolor", "color", 0, len(colorspace) - 1, callback)
img = cv2.imread("mdPNG/lesson1_1.png")
while True:
    # 获取当前trackbar的值
    index = cv2.getTrackbarPos("curcolor", "color")
    # 颜色转化
    cvt_img = cv2.cvtColor(img, colorspace[index])
    cv2.imshow("color", cvt_img)
    key = cv2.waitKey(10)
    # 销毁
    if key & 0xFF == ord("q"):
        cv2.destroyAllWindows()
        break

2.1 cvtColor(mat_src,code,dst,dstcn) -> mat

这个 api 会将输入的 mat 的色彩空间转换成指定的色彩空间,并返回一个转化后的 mat,且对输入的 mat 无任何改变。
文档介绍:该函数将输入图像从一种颜色空间转换为另一种颜色。在从 RGB 颜色空间转换到的情况下,应明确指定通道的顺序(RGB 或 BGR)。请注意,OpenCV 中的默认颜色格式通常被称为 RGB,但实际上是 BGR(字节颠倒)。因此,标准(24 位)彩色图像中的第一个字节将是一个 8 位蓝色分量,第二个字节将为绿色,第三个字节为红色。第四、第五和第六个字节将成为第二个像素(蓝色、绿色、红色),依此类推。

(1) mat_src: mat 来源
(2) code: 表示转换类型的整数代码,例如 RGB 到灰度。
(3) dst: mat 输出
(4) dstcn: 输出的通道数

标签:mat,04,COLOR,cv2,笔记,opencv,RGB,色彩
From: https://www.cnblogs.com/yuxiannana/p/17450402.html

相关文章

  • 注解@Scheduled笔记
    简介@Scheduled是Spring框架中一个用于指定定时任务的注解,它可以标注在方法上,表示这个方法是一个定时任务,会按照指定的时间间隔执行。 常见的定时任务时间间隔包括:@Scheduled(fixedDelay=xxx):表示间隔多少毫秒执行一次任务;@Scheduled(fixedRate=xxx):表示每多少毫秒执......
  • Mysql训练营笔记
    Mysql架构与内部模块演示环境:MySQL5.7存储引擎:InnoDB一、一条查询SQL是如何执行的?  程序或者工具要操作数据库,第一步跟数据库建立连接。1、通信协议首先,MySQL必须要运行一个服务,监听默认的端口(3306)。通信协议MySQL支持多种通信协议。第一个就是TCP/IP协议,编......
  • 【学习笔记】博弈论 ---- 非偏博弈
    博弈论入门前言:本篇按照Qingyu在省集讲的加入我这个萌新的萌新理解而成。听了Qingyu的博弈论讲解,感觉我之前学过的博弈就是冰山一角。由于有一些东西没听懂,就主要写写我听懂的部分,没懂得以后再说吧。所以这篇只是一个入门,关于博弈的一些习题可能会咕咕咕。平等博弈(非偏......
  • 树莓派opencv的安装
    树莓派安装opencv的教程层出不穷,但是能用的很少。我这个教程是亲自安装成功的。我之前安装过好几次opencv2.49都失败了,唯独这个opencv3.1成功了。下面开始安装吧1.准备sudoapt-getinstallbuild-essentialgitcmakepkg-configsudoapt-getinstallcmakegitlibgtk2.0-......
  • 大唐杯笔记
    微基站和有源天线单元有什么区别微基站和有源天线单元(AAU)是5G网络中的两种不同的基站设备。微基站是一种小型化、轻量级的基站,通常采用集成式设计,将射频单元、基带单元、功放等模块集成在一个小型机箱内,具有灵活性强、部署简便等特点。微基站通常使用光纤或者铜缆......
  • Linux进程管理、计划任务笔记
    一、Linux进程管理1.1、进程概念进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如说CPU(寄存器),IO,内存,网络资源等。并发程序和顺序程序有本质上的差别,为了能更好地描述程序的并发执行,实现操作系统的并发性和共享性,引入“进程”的概念。进程是具有一定独立......
  • Python笔记:正则表达式方法
    正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不......
  • 考古笔记10:网络地址转换NAT(1)-基础
    NAT的概念相关1、概念   NAT:网络地址转换实现将内网私有IP地址转换为公网IP地址 解决公网IP地址数目不足的问题 可保护内网IP地址的私密性,起到一定的安全性 还可实现企业内多个私有IP网段重叠问题2、NAT分类静态NAT:唯一的私有IP------映射------唯一的公网IP(映射关系确......
  • 客制化404页面设计上需要注意几点?
    404页面设计注意事项:1、首先404页面要保持网站统一模板,设计风格,logo及名称,不要让用户弄不清自己到了哪个网站上。2、404页面应该在最醒目的位置显示错误信息,明确提示用户,要访问的页面不存在。还可以加上几点可能性,如页面已删除,用户输入了错误的地址,链接中的地址错误,页面已转移到新......
  • z函数|exkmp|拓展kmp 笔记+图解
    题外话,我找个什么时间把kmp也加一下图解z函数|exkmp别担心这个exkmp和kmp没毛点关系,请放心食用。本文下标以1开始,为什么?因为1开始就不需要进行长度和下标的转换,长度即下标。定义给出模板串S和子串T,长度分别为n和m,对于每个ans[i](1<=i<=n),求出S[i...n]与T的最长公共前缀长......