C++ OpenCV #005 色彩空间转换
常用的色彩空间有RGB,HSV,Lab,Lch等,这些色彩空间常用于不同的场景
1. 常用色彩空间
-
RGB:R红 / G绿 / B蓝 取值范围都为[0,255],一张真彩色图片为3个通道的叠加

-
HSV:H为色调,取值范围[0,360];S为饱和度,取值范围[0,1],V为明度,取值范围[0,1];主要应用与色彩分析,排除亮度的干扰

-
Lab:L代表亮度,取值范围[0,100],a代表从绿色到红色的分量,b代表从蓝色到黄色的分量
a值为负数时,绝对值越大越趋近绿色;为正数时,值越大越趋近红色
b值为负数时,绝对值越大越趋近蓝色;为正数时,值越大越趋近黄色

2. 颜色空间转换
-
函数原型:
cvtColor(InputArray src, OutputArray dst, int code, int dstCn = 0);InputArray src:输入矩阵
OutputArray dst:输出矩阵
int code:颜色空间转换的标识符
int dstCn = 0:目标图像的通道数,若该参数是0,表示目标图像取源图像的通道数。
-
cvtColor( )支持多种颜色空间之间的转换,其支持的转换类型和转换码如下:
1、RGB和BGR(opencv默认的彩色图像的颜色空间是BGR)颜色空间的转换 cv::COLOR_BGR2RGB cv::COLOR_RGB2BGR cv::COLOR_RGBA2BGRA cv::COLOR_BGRA2RGBA 2、向RGB和BGR图像中增添alpha通道 cv::COLOR_RGB2RGBA cv::COLOR_BGR2BGRA 3、从RGB和BGR图像中去除alpha通道 cv::COLOR_RGBA2RGB cv::COLOR_BGRA2BGR 4、从RBG和BGR颜色空间转换到灰度空间 cv::COLOR_RGB2GRAY cv::COLOR_BGR2GRAY cv::COLOR_RGBA2GRAY cv::COLOR_BGRA2GRAY 5、从灰度空间转换到RGB和BGR颜色空间 cv::COLOR_GRAY2RGB cv::COLOR_GRAY2BGR cv::COLOR_GRAY2RGBA cv::COLOR_GRAY2BGRA 6、RGB和BGR颜色空间与BGR565颜色空间之间的转换 cv::COLOR_RGB2BGR565 cv::COLOR_BGR2BGR565 cv::COLOR_BGR5652RGB cv::COLOR_BGR5652BGR cv::COLOR_RGBA2BGR565 cv::COLOR_BGRA2BGR565 cv::COLOR_BGR5652RGBA cv::COLOR_BGR5652BGRA 7、灰度空间域BGR565之间的转换 cv::COLOR_GRAY2BGR555 cv::COLOR_BGR5552GRAY 8、RGB和BGR颜色空间与CIE XYZ之间的转换 cv::COLOR_RGB2XYZ cv::COLOR_BGR2XYZ cv::COLOR_XYZ2RGB cv::COLOR_XYZ2BGR 9、RGB和BGR颜色空间与uma色度(YCrCb空间)之间的转换 cv::COLOR_RGB2YCrCb cv::COLOR_BGR2YCrCb cv::COLOR_YCrCb2RGB cv::COLOR_YCrCb2BGR 10、RGB和BGR颜色空间与HSV颜色空间之间的相互转换 cv::COLOR_RGB2HSV cv::COLOR_BGR2HSV cv::COLOR_HSV2RGB cv::COLOR_HSV2BGR 11、RGB和BGR颜色空间与HLS颜色空间之间的相互转换 cv::COLOR_RGB2HLS cv::COLOR_BGR2HLS cv::COLOR_HLS2RGB cv::COLOR_HLS2BGR 12、RGB和BGR颜色空间与CIE Lab颜色空间之间的相互转换 cv::COLOR_RGB2Lab cv::COLOR_BGR2Lab cv::COLOR_Lab2RGB cv::COLOR_Lab2BGR 13、RGB和BGR颜色空间与CIE Luv颜色空间之间的相互转换 cv::COLOR_RGB2Luv cv::COLOR_BGR2Luv cv::COLOR_Luv2RGB cv::COLOR_Luv2BGR 14、Bayer格式(raw data)向RGB或BGR颜色空间的转换 cv::COLOR_BayerBG2RGB cv::COLOR_BayerGB2RGB cv::COLOR_BayerRG2RGB cv::COLOR_BayerGR2RGB cv::COLOR_BayerBG2BGR cv::COLOR_BayerGB2BGR cv::COLOR_BayerRG2BGR cv::COLOR_BayerGR2BGR -
示例:
#include<opencv2/opencv.hpp> #include<opencv2/core/utils/logger.hpp> #include<iostream> #include<string> using namespace std; using namespace cv; // 关闭日志 void close_log() { utils::logging::setLogLevel(utils::logging::LOG_LEVEL_ERROR); } void image_process() { // 创建矩阵 Mat bgr, hsv, gray; // 文件名,路径,后缀写错,会报错:error: abort() has been called const string image_name = "F:/test/1.png"; // opencv读取的图像顺序是 B,G,R bgr = imread(image_name); // 分别 BGR 转 HSV 和 GRAY cvtColor(bgr, hsv, COLOR_BGR2HSV); cvtColor(bgr, gray, COLOR_BGR2GRAY); // 创建窗口显示图片 namedWindow("BGR", WINDOW_AUTOSIZE); namedWindow("HSV", WINDOW_AUTOSIZE); namedWindow("GRAY", WINDOW_AUTOSIZE); imshow("BGR", bgr); imshow("HSV", hsv); imshow("GRAY", gray); // 保存图像 imwrite("F:/test/1_hsv.png", hsv); imwrite("F:/test/1_gray.png", gray); waitKey(0); destroyAllWindows(); } int main() { close_log(); image_process(); return 0; } -
运行结果:

3. 颜色表
-
函数原型:
applyColorMap(InputArray src, OutputArray dst, int colormap)src: 源图像
dst: 结果图像。
colormap:提供的色彩图代码值。(参见:ColormapTypes 枚举数据类型)
-
ColormapTypes 枚举数据类型:
enum ColormapTypes { COLORMAP_AUTUMN = 0, COLORMAP_BONE = 1, COLORMAP_JET = 2, COLORMAP_WINTER = 3, COLORMAP_RAINBOW = 4, COLORMAP_OCEAN = 5, COLORMAP_SUMMER = 6, COLORMAP_SPRING = 7, COLORMAP_COOL = 8, COLORMAP_HSV = 9, COLORMAP_PINK = 10, COLORMAP_HOT = 11, COLORMAP_PARULA = 12, COLORMAP_MAGMA = 13, COLORMAP_INFERNO = 14, COLORMAP_PLASMA = 15, COLORMAP_VIRIDIS = 16, COLORMAP_CIVIDIS = 17, COLORMAP_TWILIGHT_SHIFTED = 19 };
-
示例:
#include <opencv2/opencv.hpp> #include <opencv2/core/utils/logger.hpp> #include<iostream> using namespace cv; void close_log() { utils::logging::setLogLevel(utils::logging::LOG_LEVEL_ERROR); } void image_process() { Mat img = imread("F:\\test\\1.png", 1); Mat target; applyColorMap(img, target, COLORMAP_HSV); imshow("原图", img); imshow("结果图", target); waitKey(); destroyAllWindows(); } int main() { close_log(); image_process(); return 0; } -
运行结果:

本文来自博客园,作者:{枫_Null},转载请注明原文链接:https://www.cnblogs.com/fengNull/articles/16671200.html

浙公网安备 33010602011771号