OPENCV入门教程七:颜色空间转换

一、目标

学习把RGB(红绿蓝)空间的图像转化为其它空间的图像。
将RGB转化为HSV(色调(H),饱和度(S),明度(V))
将RGB转化为Lab(颜色模型 (Lab) 基于人对颜色的感觉,L表示明度(Luminosity),a表示从洋红色至绿色的范围,b表示从黄色至蓝色的范围)
将RGB转化为YCrCb(其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色)

二、函数说明

void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 ) 

src和dst分别是待转的图像(src)和待转图像转换后的图像(dst);code是一个掩码,表示由src到dst之间是怎么转的,比如是彩色转为灰度,还是彩色转为HSI模式;最后的dstCn表示dst图像的波段数,这个值默认是0,它可以从参数code中推断。
code的模式包括:
CV_BGR2YCrCb:<彩色图像转YCrCb图像>,
CV_BGR2HSV
CV_BGR2Lab

三、程序代码

#include "cv.h" // OpenCV 文件头
#include "highgui.h"
#include "cvaux.h"
#include "cxcore.h"
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc.hpp"
#include 
#include 

using namespace cv;
using namespace std;

int main(int argc, char *argv[])
{
    Mat dst_img;
    string imageName("C:\\Users\\lidabao\\Desktop\\Lena.bmp"); // 图片在电脑中的绝对地址

    Mat bgr_img = imread(imageName.c_str(), IMREAD_COLOR);//读入图片数据
    if (bgr_img.empty())
        return -1;

    namedWindow("image", 0);
    imshow("image", bgr_img);

    // BGR -> HSV
    cvtColor(bgr_img, dst_img, CV_BGR2HSV);
    namedWindow("HSV image", 0);
    imshow("HSV image", dst_img);

    // BGR -> Lab
    cvtColor(bgr_img, dst_img, CV_BGR2Lab);
    namedWindow("Lab image", 0);
    imshow("Lab image", dst_img);

    // BGR -> YCrCb
    cvtColor(bgr_img, dst_img, CV_BGR2YCrCb);
    namedWindow("YCrCb image", 0);
    imshow("YCrCb image", dst_img);
    waitKey(0);
}

四、解释

1、BGR -> HSV

cvtColor(bgr_img, dst_img, CV_BGR2HSV);

cvtColor第一个参数为原图片
第二个参数为目的图片
第三个参数为转化的掩码,表示转化的方向从BGR转到HSV

2、BGR -> Lab

cvtColor(bgr_img, dst_img, CV_BGR2Lab);

cvtColor第一个参数为原图片
第二个参数为目的图片
第三个参数为转化的掩码,表示转化的方向从BGR转到Lab

3、BGR -> Lab

cvtColor(bgr_img, dst_img, CV_BGR2YCrCb);

cvtColor第一个参数为原图片
第二个参数为目的图片
第三个参数为转化的掩码,表示转化的方向从BGR转到YCrCb

五、结果

转换结果如下图:
OPENCV入门教程七:颜色空间转换_第1张图片

六、注意

正确的配置opencv
正确使用cvtColor()函数

你可能感兴趣的:(OPENCV入门教程)