美文网首页CV
RGB 与 CMYK

RGB 与 CMYK

作者: 谢小帅 | 来源:发表于2017-07-14 22:01 被阅读5次

    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 关系

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

    相关文章

      网友评论

        本文标题:RGB 与 CMYK

        本文链接:https://www.haomeiwen.com/subject/qrgohxtx.html