3.1、图像颜色空间

本文介绍了OpenCV中颜色模型(如RGB、HSV和GRAY)的基本概念,重点讲解了如何在OpenCV中进行颜色空间转换,如BGR到GRAY、BGR到HSV,以及如何通过`cv::Mat::convertTo`和`cv::cvtColor`函数实现这些转换。此外,还讨论了多通道图像的分离与合并操作,如`cv::split`和`cv::merge`方法。
摘要由CSDN通过智能技术生成

图像颜色空间

+++

1. 颜色模型与转换

在opencv中,32F64F表示的范围都是0.0~1.08U的范围是0~255

其实是将0~1映射到0~255,小于0的部分全部变为纯黑,大于1的部分全部变为纯白

  • RGB颜色模型

由红色(red)、绿色(green)、蓝色(blue)组成**(opencv中的顺序时BGR)**。每个通道的范围是0~255,0表示纯黑、255表示纯白。在此基础上增加第4个通道就构成了RGBA模型,A即透明度。
在这里插入图片描述

  • HSV颜色模型

由色度(Hue)、饱和度(Saturation)、亮度(Value)组成。
在这里插入图片描述
在这里插入图片描述

色度指颜色,用角度表示,取值范围为[0°,360°]0°和360°表示红色、60°表示黄色、120°表示绿色…以此类推

在这里插入图片描述

饱和度表示颜色的纯度或浓度,取值范围为0~100%,0表示灰色阴影,100%表示纯色,没有混合的灰度,中间值表示颜色的饱和度介于完全灰色和纯色之间。
在这里插入图片描述

明度表示颜色的亮度或明暗程度,其范围为0~100%,0表示黑色,100%表示白色,中间值表示颜色的不同明度级别。

在这里插入图片描述

  • GRAY颜色模型

GRAY模型不是一个彩色模型,而是一个灰度图像模型,只有单通道。其取值范围为0~MAX,依次表示由黑到白,如8UC1中取值范围是0~255

灰度图只包含亮度信息,更容易处理和分析,不需要考虑颜色的变化。并且灰度图具有相同尺寸相同压缩格式所占容量小、易采集、便于传输等优点。在许多情况下,将彩色图像转化为灰度图是常用的操作,减少原图像数据的复杂性并保留其亮度信息

RGB模型转化为GRAY模型的关系:
G R A Y = 0.3 R + 0.59 G + 0.11 B GRAY = 0.3R + 0.59G + 0.11B GRAY=0.3R+0.59G+0.11B

+++

opencvAPI

  • void cv::Mat::convertTo(OutputArray m,int rtype,double alpha = 1.0,double beta = 0.0) const
    • m:表示转换后的图像
    • rtype:转换图像的数据类型,如CV_8UCV_32F
    • alpha:可选参数,表示缩放因子
    • beta:可选参数,表示偏置因子

这是一个成员函数,用于将图像的数据类型进行转换

转换公式:
m ( i , j ) = s a t u r a t e _ c a s t < r t y p e > ( α ( ∗ t h i s ) ( i , j ) + β ) m ( i , j ) 表示转换图像在 ( i , j ) 处的像素值 s a t u r a t e _ c a s t < r t y p e > 是一个饱和度转换函数,它将结果限制在指定数据类型的范围内 α 是缩放因子 , 用于对像素值进行缩放 β 是偏置因子 , 用于对像素值进行偏移 ( ∗ t h i s ) ( i , j ) 表示原始图像在该位置处的像素值 m(i,j) = saturate\_cast<rtype>(\alpha (*this)(i,j)+\beta) \\ m(i,j)表示转换图像在(i,j)处的像素值 \\ saturate\_cast<rtype>是一个饱和度转换函数,它将结果限制在指定数据类型的范围内\\ \alpha 是缩放因子,用于对像素值进行缩放\\ \beta 是偏置因子,用于对像素值进行偏移 \\ (*this)(i,j)表示原始图像在该位置处的像素值 m(i,j)=saturate_cast<rtype>(α(this)(i,j)+β)m(i,j)表示转换图像在(i,j)处的像素值saturate_cast<rtype>是一个饱和度转换函数,它将结果限制在指定数据类型的范围内α是缩放因子,用于对像素值进行缩放β是偏置因子,用于对像素值进行偏移(this)(i,j)表示原始图像在该位置处的像素值
这个公式的本质就是将原始图像的像素值进行线性变换然后将结果存储到新的图像中完成对图像的数据类型转换。

  • void cv::cvtColor(InputArray src,OutputArray dst,int code,int dstCn = 0)
    • src:待转换的原始图像
    • dst:输出图像,转换后的图像
    • code:转换代码,指定要执行的颜色空间模型转换
      • cv::COLOR_BGR2GRAYBGR到灰度
      • cv::COLOR_BGR2HSVBGR到HSV
    • dstCn:可选参数,指定输出图像的通道数。默认值为0表示自动确定通道数

用于将图像从一种颜色模型转换为另一种颜色模型的图像,例如将RGB转换为灰度图等。

+++

2.多通道分离与合并

在图像颜色模型中,不同分量存放在不同的通道中,如果我们只需要一个通道的数据,我们就可以将该通道分离出来,这种方式可以减少数据所占据的内存,加快程序运行速度;同时,我们也可以将分离出的通道进行合并生成多通道图像。

opencvAPI

  • void cv::split(InputArray src,OutputArrayOfArray dst)
    • src:待分离的多通道图像
    • dst:分离后的所有单个通道组成的数组(vector存的),也就是vector<Mat> dst

用于将多通道图像分割成单通道图像

它的一个重载版本

void cv::split(InputArray src,Mat* mv) 它的第二个参数是一个普通数组来存每个通道,这个数组的大小要与通道数相同。

  • void cv::merge(InputArrayOfArrays mv,OutputArray dst)
    • mv:待合并的单通道图像数组(vector形式)
    • dst:合并后的图像

用于将多个单通道图像合并为一个多通道图像

它的一个重载版本

void cv::merge(const Mat* mv,size_t count,OutputArray dst)它的第一个参数是数组形式,第二个参数是指定要合并的通道数(如果数组大小>count,按照count指定的通道个数合并)

用于合并的多个通道必须具有相同的尺寸和数据类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值