Opencv 多通道图像混合

在学习多通道图像混合的时候,发现将图片分成多通道(split),想把其中一个通道跟别的图片相加的时候,别的图片也需要是单通道的图像,如灰度图、或者是BlueChannel等等。代码如下:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>


//#include <cstring>
using namespace cv;
using namespace std;
string picroad = "E:\\VisualStudioProjects\\PICS";
//---------------------------------【MultiChannelBlending()】-------------------------------------
// 函数名:MultiChannelBlending()
//
//--------------------------------------------------------------------------------------------
bool MultiChannelBlending()
{
vector<Mat> channels;
vector<Mat> channels2;
Mat imageBlueChannel;
Mat logoImageBlueChannel;
//【1】读取图像
string picroad_srcimage4 = picroad + "\\dota_pa.jpg";
string picroad_logoimage = picroad + "\\dota_logo.jpg";
Mat srcImage4 = imread(picroad_srcimage4);
Mat logoImage = imread(picroad_logoimage);//注意!!!这里必须用灰度图(0)
//两幅相同的类型的图像才能混合。源图像已经分离成B\G\R单通道图像,所以加载时需要设置为灰度图。

if (!srcImage4.data) { printf("你妹,读取srcImage4错误~! \n"); return false; }
if (!logoImage.data) { printf("你妹,读取logoImage错误~! \n"); return false; }


split(srcImage4,channels);
imageBlueChannel = channels.at(0);

split(logoImage, channels2);
logoImageBlueChannel = channels2.at(0);


addWeighted(imageBlueChannel(Rect(0, 0, logoImage.cols, logoImage.rows)), 1.0,
logoImageBlueChannel, 0.5, 0, imageBlueChannel(Rect(0, 0, logoImage.cols, logoImage.rows)));


merge(channels,srcImage4);
//【4】显示结果
namedWindow("<5>通过<4>改编的多通道混合 by zxjor");
imshow("<5>通过<4>改编的多通道混合 by zxjor", srcImage4);


return true;
}


void main(){
system("color 4E");
if (MultiChannelBlending())
{
cout << endl << "OK, get the picture you want";
}
waitKey();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值