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 <iostream>
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學習筆記(九) – 圖像色彩通道的分離與合併

發佈了69 篇原創文章 · 獲贊 70 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章