您的位置:首页 > 运维架构

OpenCV 分离颜色通道与多通道图像混合

2014-05-10 00:15 507 查看
同样学习自浅墨大神博客,代码与注释经自己习惯和编程风格做了些许修改,如希望亲自一睹大神风采,请猛搓下面链接:点击打开链接

本篇对应的大神博客篇目为:【OpenCV入门教程之五】 分离颜色通道&多通道图像混合

由于代码较为简单,可自行建立工程配置 OpenCV后加入下面的代码自行运行尝试,图片需要自己准备,如果希望得到完整工程,浅墨大神的博客教程中有放出对应工程的下载链接

包含头文件

#include <cv.h>
#include <highgui.h>
using namespace cv;


主体代码

//定义相关变量
Mat srcImage;
Mat logoImage;
vector<Mat> channels;
Mat  imageBlueChannel;
//Mat  imageGreenChannel;
//Mat  imageRedChannel;

logoImage = imread("dota_logo.jpg", 0);//读入图片转为灰度图
srcImage = imread("dota_jugg.jpg");

if (!logoImage.data) { printf("Oh,no,读取logoImage错误~! \n"); return false; }//读取检测
if (!srcImage.data) { printf("Oh,no,读取srcImage错误~! \n"); return false; }

split(srcImage, channels);//分离色图像色彩通道,则三通道图像成为三个单通道图像
imageBlueChannel = channels.at(0);//将原图的蓝色通道引用返回给imageBlueChannel。注意是引用,相当于两者等价,修改其中一个另一个跟着变
//imageGreenChannel = channels.at(1);//以此类推亦可得到其他两个通道
//imageRedChannel = channels.at(2);

//将原图的蓝色通道的(500,250)坐标处右下方的一块区域和logo图进行加权操作,将得到的混合结果存到imageBlueChannel中
addWeighted(imageBlueChannel(Rect(500, 250, logoImage.cols, logoImage.rows)), 1.0,
logoImage, 0.5, 0, imageBlueChannel(Rect(500, 250, logoImage.cols, logoImage.rows)));//其他两个通道亦是此理
merge(channels, srcImage);//将三个单通道重新合并成一个三通道

namedWindow("游戏原画+logo蓝色通道 by浅墨");//显示效果图
imshow("游戏原画+logo蓝色通道 by浅墨", srcImage);
imwrite("游戏原画+logo蓝色通道 by浅墨.jpg", srcImage);//输出一张jpg图片到工程目录下

waitKey();//无限制的等待按键事件


效果图(右下方的蓝色LOGO就是蓝色通道加权logo图像后的结果):



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: