搜索
您的当前位置:首页正文

RGB 与 CMYK

来源:二三娱乐

RGB 与 CMYK 颜色空间

  • RGB有3个颜色通道,CMYK有4个,K指黑色通道
  • 保存图像颜色信息的通道称为颜色通道
  • 比如R通道的值,可以理解为红的程度,越接近255,越红
RGB颜色空间

转成单色通道步骤

  1. 加载原图像
  2. 分离颜色通道(分离出 R, G, B)
  3. 混合颜色通道(由 R, G, B 可以混合成其他颜色通道)
  4. 显示新图像

实例

#include <cv.h>
#include <highgui.h>

using namespace cv;
using namespace std;

int main() {

    // 参数 CV_LOAD_IMAGE_COLOR 意味着不管原始图像的通道数是多少,都将被转换为3通道输入
    IplImage *srcImage = cvLoadImage("../pictures/bear.jpeg", CV_LOAD_IMAGE_COLOR);
    // 原图像
    cvNamedWindow("RGB");
    cvShowImage("RGB", srcImage);

    // 单通道 image
    // 分别存储3个通道
    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);

    // 分开通道
    cvSplit(srcImage, Bimage, Gimage, Rimage, 0);

    // 3通道 image
    // 分别存储融合后的新图
    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);

根据 RGB 叠加色原理,还可以合成 青,黄,品红

// CMYK 颜色空间
cvMerge(Bimage, Gimage, 0, 0, CyanImage);    // 蓝 + 绿 = 青
cvMerge(Bimage, 0, Rimage, 0, MagentaImage); // 蓝 + 红 = 品红
cvMerge(0, Gimage, Rimage, 0, YellowImage);  // 绿 + 红 = 黄

RGB 与 CMYK 关系

蓝 + 绿 = 青 蓝 + 红 = 品红 绿 + 红 = 黄
Top