Opencv学习笔记(八) -- 图像色彩空间转换

1.常见图像色彩空间

  • RGB
    RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色。

    注:
    RGB是opencv图像加载时默认的色彩空间。默认的图像通道顺序为BGR。

  • YUV
    在现代彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号B-Y(即U)、R-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。

    注:
    采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的,便于对亮度和色彩分别进行处理。

  • HSV
    HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
    这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。
  • Bayer格式
    Bayer格式是相机内部的原始图片。同其他色彩格式相比,Bayer格式占用空间最小,每个像素只需要一个字节表示。当图像尺寸为N*M时,其中的G,B,R色彩占用的个数如下:
    G:N*M/2
    R:N*M/4
    B:N*M/4
  • 常用转换模式
    (1)RGB与BGR转换
    COLOR_BGR2RGB
    COLOR_RGB2BGR
    (2) RGB与YUV转换
    COLOR_BGR2YUV
    COLOR_RGB2YUV
    COLOR_YUV2BGR
    COLOR_YUV2RGB

    //! YUV 4:2:0 family to RGB
    COLOR_YUV2RGB_NV12
    COLOR_YUV2BGR_NV12
    COLOR_YUV2RGB_NV21
    COLOR_YUV2BGR_NV21
    (3)RGB与HSV转换
    COLOR_BGR2HSV
    COLOR_RGB2HSV
    COLOR_HSV2RGB
    COLOR_HSV2BGR
    (4)Bayer与RGB转换
    COLOR_BayerBG2BGRA
    COLOR_BayerGB2BGRA
    COLOR_BayerRG2BGRA
    COLOR_BayerGR2BGRA
    COLOR_BayerBG2RGBA
    COLOR_BayerGB2RGBA
    COLOR_BayerRG2RGBA
    COLOR_BayerGR2RGBA

2.涉及函数

cvtColor

  • 函数功能
    调整图像的色彩空间
  • 函数原型
CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
  • 相关参数
    InputArray src – 原始图像
    OutputArray dst – 转换后图像
    int code – 转换编码
    int dstCn = 0 – 目标图像通道数,如果取值为0,则由src和code决定
  • 返回值

    其余编码见后续介绍。
    注意:
    1.imread函数读取的彩色图像为BGR格式,而非RGB格式;
    2.彩色图像与灰度图像的转换是不可逆的。

3.代码实例

  • 代码说明
    本例主要展示如何对图像进行色彩空间转换。
  • 测试平台
    1.开发语言:C++
    2.开发工具:VS2015
    3.操作系统:Win7 X64
  • 具体代码
#include 
using namespace std;

#include "cv.h"
#include "opencv2\opencv.hpp"
using namespace cv;

#if _DEBUG
#pragma comment(lib,"opencv_world340d.lib")
#else
#pragma comment(lib,"opencv_world340.lib")
#endif

int main()
{
    Mat src = imread("D:\\OpencvTest\\lena.jpg");

    if (src.data != NULL)
    {
        Mat yuvImage;
        cvtColor(src, yuvImage, COLOR_BGR2YUV);

        Mat hsvImage;
        cvtColor(src, hsvImage, COLOR_BGR2HSV);

        imshow("原始图像", src);
        imshow("YUV", yuvImage);
        imshow("HSV", hsvImage);
        cvWaitKey(0);
    }
    else
    {
        cout << "图片加载失败,请检查文件是否存在!" << endl;
    }

    getchar();
    return 0;
}


  • 输出截图

栏目导航
上一篇:Opencv学习笔记(七) – 图像的灰度化
下一篇:Opencv学习笔记(九) – 图像色彩通道的分离与合并

你可能感兴趣的:(Opencv,Opencv学习笔记)