【秣厉科技】LabVIEW工具包——OpenCV 教程(4):颜色空间


前言

  1. 需要下载安装OpenCV工具包的朋友,请前往 此处
  2. 系统要求:Windows系统,LabVIEW>=2018,兼容32位和64位。

颜色空间转换

颜色空间,是一种用来表示颜色的数学模型,也是计算机中用来计算和存储颜色量所采取的方案。

在OpenCV中,RGB作为默认的颜色空间(但通道顺序为BGR)。R、G、B分别代表像素的红、绿、蓝分量。

除此之外,常用的颜色空间还有:

RGB红、绿、蓝
RGBA红、绿、蓝、透明度(alpha通道)
GRAY灰度
HSV色相、饱和度、明度
HSL色相、饱和度、亮度
YUV亮度、蓝色度、红色度(常用于视频流压缩)
BayerXXX拜耳颜色阵列(相机传感器原始数据)

在OpenCV下做颜色空间转换,可以使用 imgproc 模块下的函数,选板如下图(节选)。

在这里插入图片描述


1. cvtColor

例1-1:读取一张彩色图(BRG),转换成灰度图(GRAY)。

在这里插入图片描述


例1-2:读取一张彩色图(BRG),转换到HSV空间。

本例中,cvtColor输入的 “源” 和 “目标” 矩阵合并了,这样做也是可以的,代表直接将转化结果写入到 “源” 图像中。但要特别注意,由于此时 “源” 和 “目标” 实际是同一个对象,所以读取原始图像一定要趁早(在转化之前)。并且只要其中一个release,那么两者都被释放了。利用labVIEW的连线关系,确保任何矩阵函数都在release之前执行完成。

转化后的图像,3通道数据分别代表H、S、V,而 to_LV 仍然按照BGR解析,所以图像颜色看起来是很奇怪的。

在这里插入图片描述


例1-3:读取一张彩色图(BRG),转换成YV12格式,并分离Y平面和UV平面。

YV12是YUV格式的一种压缩方式,Y通道全采样,U、V通道 1/2 采样(水平、垂直方向都是1/2)。

如果源图像行数是H,那么通过cvtColor转换的YV12矩阵,其前H行代表Y平面,剩余行代表UV平面。

在内存中,U、V分别reshape成与Y平面相同的宽度(cols),追加在Y平面末尾,作为拓展行。如下图。

在这里插入图片描述


2. cvtColorTwoPlane

当源图像来自两个Mat时,比如Y平面和UV平面,可以用 cvtColorTwoPlane 将它们转化到RGB的空间。

将上文“例1-3”得到的 Y 和 UV 重新变回 BGR 图像,算法如下图。(YV12是压缩格式,所以还原图像已经部分失真)

注意,cvtColorTwoPlane 要求输入的UV平面矩阵是2通道(U、V各占1个通道),并且长、宽都是Y平面矩阵的一半。所以“例1-3”得到的UV不能直接用,需要经过一番转换。

merge.vi 位于 core 模块,功能是将多个单通道Mat合并成一个多通道Mat。

在这里插入图片描述


3. demosaicing

数码相机的图像传感器通常覆盖了一层色彩滤镜阵列(如拜耳滤镜),每个像素仅能感知红、绿、蓝中的一种颜色。例如,拜耳滤镜中绿色像素占比50%,红蓝各占25%。原始数据呈现马赛克状分布,而demosaicing通过分析相邻像素的颜色信息,补全每个像素的缺失色彩。

在这里插入图片描述

下图展示的是:读取一张BGR图像,然后模拟生成拜耳阵列,即奇数行交替保留B、G,偶数行交替保留G、R。最后用 demosaicing.vi 将拜耳阵列还原为BRG图像。(当然了,图像也是部分失真,毕竟降采样了)

在这里插入图片描述


颜色筛选

对图片特定颜色的筛选,通常要在 HSV 或 HSL 空间进行。

以 HSV 空间为例,当S、V均不低于临界值时,颜色的种类几乎完全由H决定。当S、V低于临界值时,则呈现不同程度的黑、白、灰。

在这里插入图片描述
下图展示的是:读取一张BGR图像,转化到HSV空间,再根据上述表格筛选出黄色像素。

inRange.vi 位于core选板,功能是将满足范围条件的像素设为255,其余设为0,最终输出同尺寸的单通道矩阵。

第二次进行cvtColor,是为了将 inRange 结果转成3通道,以便与原图像做 “&” 运算。

在这里插入图片描述


颜色映射

如何将一张灰度图重新上色?cvtColor 似乎可以从GRAY转到BGR,但转化的结果只是通道数变成3了,图像依旧是没有颜色的。

或许可以试试 applyColorMap 函数,对灰度图做颜色重映射。该函数同样位于 imgproc 模块。

下图采用系统预置的配色方案 COLORMAP_AUTUMN 对灰度图重新上色。

在这里插入图片描述

同时 applyColorMap 还支持用户自定义配色方案。需要给定一个3通道,长度256的向量矩阵,作为调色盘。

下图展示的是,通过自定义配色方案,将灰度小于50的像素变成红色,其他像素保持原灰度颜色不变。

在这里插入图片描述


总结

  1. 本系列博文作为LabVIEW工具包—OpenCV的教程,将以专栏的形式陆续发布和更新。
  2. 对工具包感兴趣的朋友,欢迎下载试用:秣厉科技 - LabVIEW工具包 - OpenCV
  3. 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秣厉科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值