RGB 與 CMYK 顏色空間
- RGB有3個(gè)顏色通道,CMYK有4個(gè),K指黑色通道
- 保存圖像顏色信息的通道稱(chēng)為顏色通道
- 比如R通道的值,可以理解為紅的程度际歼,越接近255,越紅
轉(zhuǎn)成單色通道步驟
- 加載原圖像
- 分離顏色通道(分離出 R, G, B)
- 混合顏色通道(由 R, G, B 可以混合成其他顏色通道)
- 顯示新圖像
實(shí)例
#include <cv.h>
#include <highgui.h>
using namespace cv;
using namespace std;
int main() {
// 參數(shù) CV_LOAD_IMAGE_COLOR 意味著不管原始圖像的通道數(shù)是多少姑蓝,都將被轉(zhuǎn)換為3通道輸入
IplImage *srcImage = cvLoadImage("../pictures/bear.jpeg", CV_LOAD_IMAGE_COLOR);
// 原圖像
cvNamedWindow("RGB");
cvShowImage("RGB", srcImage);
// 單通道 image
// 分別存儲(chǔ)3個(gè)通道
IplImage *Bimage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1); // 1通道
IplImage *Gimage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);
IplImage *Rimage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 1);
// 分開(kāi)通道
cvSplit(srcImage, Bimage, Gimage, Rimage, 0);
// 3通道 image
// 分別存儲(chǔ)融合后的新圖
IplImage *BlueImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3); // 3通道
IplImage *GreenImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3);
IplImage *RedImage = cvCreateImage(cvGetSize(srcImage), IPL_DEPTH_8U, 3);
// 合成圖像前先清零
cvSetZero(BlueImage);
cvSetZero(GreenImage);
cvSetZero(RedImage);
// 合成圖像
cvMerge(Bimage, 0, 0, 0, BlueImage);
cvMerge(0, Gimage, 0, 0, GreenImage);
cvMerge(0, 0, Rimage, 0, RedImage);
// 顯示新圖像
cvNamedWindow("Blue");
cvShowImage("Blue", BlueImage);
cvNamedWindow("Green");
cvShowImage("Green", GreenImage);
cvNamedWindow("Red");
cvShowImage("Red", RedImage);
waitKey(0);
return 0;
}
原圖
合成 RGB 單色通道圖像
// RGB 顏色空間
cvMerge(Bimage, 0, 0, 0, BlueImage);
cvMerge(0, Gimage, 0, 0, GreenImage);
cvMerge(0, 0, Rimage, 0, RedImage);
根據(jù) RGB 疊加色原理鹅心,還可以合成 青,黃纺荧,品紅
// CMYK 顏色空間
cvMerge(Bimage, Gimage, 0, 0, CyanImage); // 藍(lán) + 綠 = 青
cvMerge(Bimage, 0, Rimage, 0, MagentaImage); // 藍(lán) + 紅 = 品紅
cvMerge(0, Gimage, Rimage, 0, YellowImage); // 綠 + 紅 = 黃