opencv版本: opencv3.4.1
颜色空间转换是利用cv::cvtColor()函数来实现的;
参数1: 输入图像
参数2:输出图像
参数3: 宏值,常见如下
CV_BGR2BGR555
CV_BGR2BGR565
CV_BGR2BGRA
CV_BGR2GRAY
CV_BGR2HLS
CV_BGR2HLS_FULL
CV_BGR2HSV
CV_BGR2HSV_FULL
CV_BGR2Lab
CV_BGR2Luv
CV_BGR2RGB
CV_BGR2RGBA
CV_BGR2XYZ
CV_BGR2YCrCb
CV_BGR2YUV
CV_BGR2YUV_I420
CV_BGR2YUV_IYUV
CV_BGR2YUV_YV12
参数4:目的通道数,默认0,取源图像通道数
void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
测试代码:
int main()
{
cv::Mat srcImage = cv::imread("./lena.jpg");
if(srcImage.empty()){
std::cout << "imread failed" << endl;
return -1;
}
cv::Mat image_hsv, image_ycbcr,image_hlv,image_lab, image_H, image_S, image_V, image_col;
//HSV颜色空间转换
cv::cvtColor(srcImage, image_hsv, CV_BGR2HSV);
cv::imwrite("./lena_hsv.jpg", image_hsv);
//分离HSV各个通道
vector<cv::Mat> hsvChannels;
cv::split(image_hsv, hsvChannels);
image_H = hsvChannels[0];
image_S = hsvChannels[1];
image_V = hsvChannels[2];
cv::imwrite("./lena_H.jpg", image_H);
cv::imwrite("./lena_S.jpg", image_S);
cv::imwrite("./lena_V.jpg", image_V);
//YCbCr颜色空间转换
cv::cvtColor(srcImage, image_ycbcr, CV_BGR2YCrCb);
cv::imwrite("./lena_ycbcr.jpg", image_ycbcr);
//HLS颜色空间转换
cv::cvtColor(srcImage, image_hlv, CV_BGR2HLS);
cv::imwrite("./lena_hls.jpg", image_hlv);
//Lab颜色空间转换
cv::cvtColor(srcImage, image_lab, CV_BGR2Lab);
cv::imwrite("./lena_lab.jpg", image_lab);
return 0;
}
生成的图像如下: