OpenCV—多通道颜色分离&混合

本文介绍如何使用OpenCV分离颜色通道并结合灰度图实现不同颜色图像的生成,包括红色、绿色、黄色、青色、紫色和蓝色图像的制作过程及代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天一直在跟着浅墨的博客学习OpenCV,关于【OpenCV入门教程之五】 分离颜色通道&多通道图像混合 本人提出一些自己的看法:

1、首先感谢浅墨的OpenCV教程,写的很详细,通俗易懂,受益匪浅,  http://blog.youkuaiyun.com/poem_qianmo/article/details/21176257 

2、因为最初的设想是想将一张图片的颜色分别呈现出红色,蓝色,绿色,而不是像浅墨是将感兴趣的区域做颜色的变化。所以我首先是分离颜色通道,然后在将各种颜色通道与灰度图进行混合,这样就可以出现不同颜色的图像了。

3、分离颜色通道与混合,在浅墨的教程中讲的很清楚了,这里就不提了,直接上代码,并提出一些需要注意的地方。
//
//  main.cpp
//  OpenCV
//
//  Created by 张雪鉴 on 14-12-10.
//  Copyright (c) 2014年 张雪鉴. All rights reserved.
//


#include 
   
    
using namespace cv;

int main(int argc, const char * argv[]) {
    
    Mat img=imread("/Users/zhangxuejian/Pictures/nike.jpg");    //读取图像
    Mat imgGray=imread("/Users/zhangxuejian/Pictures/nike.jpg",0 ); //读取灰度图像
    vector
    
      channels;   //颜色通道,vector一定是小写的,Vector会出错
    Mat imageGreenChannel,imageBlueChannel,imageRedChannel,imageYellowChannel,imagePurpleChannel,imageCyanChannel;
    Mat red,green,blue;
    
    split(img, channels);   //把原图进行颜色的分离,红色在通道2,绿色通道1,蓝色通道0
    
        red=channels.at(2);
        addWeighted(red,1,imgGray,1,2,red); //因为red是从原图分离出来的红色通道,imgGray也是原图的灰度图,所以它们的尺寸是一样的,尺寸不一样就会出差
        merge(channels,imageRedChannel);    //此时红色通道已经变味red和imgGray的混合,所以通过merge再将3个通道进行混合,这是得出的便是红色的图像
    
        green=channels.at(1);   //同理green是绿色通道的引用
        addWeighted(green,1,imgGray,1,1,green); //green与灰度图混合并重新返回给green
        merge(channels,imageYellowChannel); //注意此时混合之后的颜色不会是绿色的了,因为在通道中已经存在上面处理后的red,所以此时混合后是红色和绿色的混合,也就是黄色
    
    split(img, channels);   //要想出现绿色的图像,我们需要对原图进行重新分离,所以一下代码的道理同上
    
        green=channels.at(1);
        addWeighted(green,1,imgGray,1,1,green);
        merge(channels,imageGreenChannel);  //绿色图像
    
        blue=channels.at(0);
        addWeighted(blue,1,imgGray,1,0,blue);
        merge(channels,imageCyanChannel);   //青色图像

    
    split(img, channels);
    
        blue=channels.at(0);
        addWeighted(blue,1,imgGray,1,0,blue);
        merge(channels,imageBlueChannel);   //蓝色图像
    
        red=channels.at(2);
        addWeighted(red,1,imgGray,1,2,red);
        merge(channels,imagePurpleChannel); //紫色图像

    imshow("orginal", img);
    imshow("gray", imgGray);
    imshow("green", imageGreenChannel);
    imshow("blue", imageBlueChannel);
    imshow("red", imageRedChannel);
    imshow("yellow", imageYellowChannel);
    imshow("purple", imagePurpleChannel);
    imshow("cyan", imageCyanChannel);

    waitKey();
    
}

    
   
4、总结
运行的结果:



源码以及素材下载地址:
http://download.youkuaiyun.com/detail/ballshe/8247011
本人实在xcode下写的代码,所以吧main.cpp中的代码复制过去,opencv配置好就可以了,还有图片的文件路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值