概述
opencv使用cvtColor()函数对图像进行色彩空间的转换。

API说明
C++ API如下表所示:

void cv::cvtColor    (    InputArray    src,    (原始图像,格式:8-bit unsigned / 16-bit unsigned / single-precision floating-point)
OutputArray    dst,    (目标图像:size与depth和原始图像要相等)
int    code,    (色彩空间转换码)(ColorConversionCodes)
int    dstCn=0    (目标图像的通道数,此参数为0时,目标图像的通道数由原始图像自动生成)
)            
python API如下表所示:

dst    =    cv.cvtColor(    src, code[, dst[, dstCn]]    )
功能说明
将输入图像从一个色彩空间转换到另一个色彩空间。
在处理RGB图像时要注意色彩通道的顺序(RGB或BGR)。
opencv中的默认色彩空间实际是BGR,但是常常以RGB提及。
对于一个24位标准彩色图像而言,1个像素对应3个字节(8位),每个字节依次对应B,G和R分量。
R,G,和B分量的取值范围一般如下:

对于CV_8U 图像:0 到 255
对于CV_16U 图像:0 到 65535
对于CV_32F 图像:0 到 1
对于线性变换,该取值范围 不重要。
对于非线性变换,输入的rgb图像应当先归一化到正确的取值范围,从而得到正确的结果。
例如:RGB → L*u*v*,输入图像:8-bit image,目标图像:32-bit floating-point image,在调用 cvtColor()函数之前,应当将输入图像的分量的取值范围从0~255缩到0~1:
img *= 1./255;
cvtColor(img, img, COLOR_BGR2Luv);
如果对8-bit images使用cvtColor()函数,转换会丢失部分信息,一般不明显。推荐先将图像转换成32-bit images,再进行色彩空间转换,最后再把图像转换成8-bit images。

如果转换后添加了透明通道,其值会被设置为对应通道取值范围的最大值(255 for CV_8U, 65535 for CV_16U, 1 for CV_32F)。
 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐