cv::cvtColor()函数在保留相同数据类型的同时从一个颜色空间转换导另一个颜色空间。
函数原型:
void cv::cvtColor(
cv::InputArray src, // input array
cv::OutputArray dst, // result array
int code, // color mapping code
int dstCn = 0 // channels in output (0 = automatic)
);
输入矩阵src可以是8位矩阵,16位无符号矩阵或32位浮点矩阵。
输出矩阵dst与输入矩阵有相同的尺寸和深度。
参数code指定要完成的转换操作,可能的值参考下表。
dstCn是目标图像需要的通道数,如果设置为0,表示通道数由src中的通道数和转换编码确定。
cv::cvtColor()可以实现的转换:
转换编码 | 意义 |
cv::COLORBGR2RGB | 在RGB或BGR颜色空间之间转换(包括或不包括alpha通道) |
cv::COLOR_RGB2BGR | |
cv::COLOR_RGBA2BGRA | |
cv::COLOR_BGRA2RGBA | |
cv::COLOR_RGB2RGBA | 在RGB或BGR图像中加入alpha通道 |
cv::COLOR_BGR2BGRA | |
cv::COLOR_RGBA2RGB | 从RGB或BGR图像中删除alpha通道 |
cv::COLOR_BGRA2BGR | |
cv::COLOR_RGB2BGRA | 在加入或删除alpha通道时将RGB转换为BGR颜色空间 |
cv::COLOR_RGBA2BGR | |
cv::COLOR_BGR2RGBA | |
cv::COLOR_BGRA2RGB | |
cv::COLOR_RGB2GRAY | 转换RGB或BGR颜色空间为灰度空间 |
cv::COLOR_BGR2GRAY | |
cv::COLOR_GRAY2RGB | 转换灰度空间为RGB或BGR颜色空间(在转换过程中可选择删除alpha通道 |
cv::COLOR_GRAY2BGR | |
cv::COLOR_RGBA2GRAY | |
cv::COLOR_BGRA2GRAY | |
cv::COLOR_GRAY2RGBA | 将灰度空间转换为RGB或BGR颜色空间,并加入alpha通道 |
cv::COLOR_GRAY2BGRA | |
cv::COLOR_RGB2BGR565 | 将RGB或BGR颜色空间转换为BGR565颜色表示,可选择加入或删除alpha通道(16位图像) |
cv::COLOR_BGR2BGR565 | |
cv::COLOR_BGR5652RGB | |
cv::COLOR_BGR5652BGR | |
cv::COLOR_RGBA2BGR565 | |
cv::COLOR_BGRA2BGR565 | |
cv::COLOR_BGR5652RGBA | |
cv::COLOR_BGR5652BGRA | |
cv::COLOR_GRAY2BGR565 | 将灰度空间转换位BGR565颜色表示或者反变换 |
cv::COLOR_BGR5652GRAY | |
cv::COLOR_RGB2BGR555 | 从RGN或BGR颜色空间转换为BGR555颜色表示,可选择加入或删除alpha通道(16位图像) |
cv::COLOR_BGR2BGR555 | |
cv::COLOR_BGR5552RGB | |
cv::COLOR_BGR5552BGR | |
cv::COLOR_RGBA2BGR555 | |
cv::COLOR_BGRA2BGR555 | |
cv::COLOR_BGR5552RGBA | |
cv::COLOR_BGR5552BGRA | |
cv::COLOR_GRAY2BGR555 | 灰度空间与BGR555颜色表示相互转换 |
cv::COLOR_BGR5552GRAY | |
cv::COLOR_RGB2XYZ | 将RGB或BGR图像转换为CIE XYZ表示或者反转 |
cv::COLOR_BGR2XYZ | |
cv::COLOR_XYZ2RGB | |
cv::COLOR_XYZ2BGR | |
cv::COLOR_RGB2YCrCb | 转换RGB或BGR图像导luma-chroma(a.k.a YCC)颜色表示或反转 |
cv::COLOR_BGR2YCrCb | |
cv::COLOR_YCrCb2RGB | |
cv::COLOR_YCrCb2BGR | |
cv::COLOR_RGB2HSV | 将RGB或BGR图像转换为HSV颜色表示或反转 |
cv::COLOR_BGR2HSV | |
cv::COLOR_HSV2RGB | |
cv::COLOR_HSV2BGR | |
cv::COLOR_RGB2HLS | 将RGB或BGR图像转换为HLS(hue lightness saturation)颜色表示或反转 |
cv::COLOR_BGR2HLS | |
cv::COLOR_HLS2RGB | |
cv::COLOR_HLS2BGR | |
cv::COLOR_RGB2Lab | 将RGB或BGR转换为CIE Lab颜色表示或者反变换 |
cv::COLOR_BGR2Lab | |
cv::COLOR_Lab2RGB | |
cv::COLOR_Lab2BGR | |
cv::COLOR_RGB2Luv | 将RGB或BGR图像转换为CIE Luv颜色表示或者反变换 |
cv::COLOR_BGR2Luv | |
cv::COLOR_Luv2RGB | |
cv::COLOR_Luv2BGR | |
cv::COLOR_BayerBG2RGB | 从Bayer模式转换为RGB或BGR图像 |
cv::COLOR_BayerGB2RGB | |
cv::COLOR_BayerRG2RGB | |
cv::COLOR_BayerGR2RGB | |
cv::COLOR_BayerBG2BGR | |
cv::COLOR_BayerGB2BGR | |
cv::COLOR_BayerRG2BGR | |
cv::COLOR_BayerGR2BGR |
颜色空间转换有以下约定:
1. 8位图像范围是0~255,16位图像范围是0~65535,浮点数范围是0.0~1.0。
2. 灰度图像转换为彩色图像时,最终图像的所有通道都是相同的,但是逆变换(RGB或BGR转换为灰度),使用加权公式计算灰度值:Y = 0.299*R + 0.587*B + 0.114*B。
3. HSV或HLS表示的情况下,色调通常为0~360。8位图像中,可能会出现问题,因此转换到HSV颜色空间,并以8位图的形式输出时,色调应该除以2。