1. 程式人生 > >三通道影象轉化為三通道,並將多通道影象混合

三通道影象轉化為三通道,並將多通道影象混合

#include<cv.h>
#include<highgui.h>
#include<iostream>
using namespace cv;
using namespace std;
bool duotongdao();
int main()
{


if(duotongdao())
{
cout<<endl<<"恩 得到混合值影象";
}
waitKey(0);
return 0;
}
bool duotongdao()
{
Mat srcImage;
Mat logoImage;
vector<Mat>channels;
Mat imageBlueChannel;
logoImage = imread("cloud.jpg",0);//>0 Return a 3-channel color image  =0 Return a grayscale image
srcImage = imread("ali.jpg");
if(!logoImage.data){
printf("no it is wrong !");
}
if(!srcImage.data){
printf("no it is wrong !");
}
//把一個3通道影象轉化為3個單通道影象
split(srcImage,channels);//分離色彩通道
//將原圖的藍色通道引用返回給imageBlueChannel,注意是引用,相當於兩者等價,修改其中之一,另一個跟著改變
imageBlueChannel = channels.at(0);
//將原圖的藍色通道的(100,100)座標處右下方的一塊區域和logo圖進行加權操作,將得到的混合結果存到
//imageBlueChannel中
addWeighted(imageBlueChannel(Rect(100,100,logoImage.cols,logoImage.rows)),0.8,
logoImage,0.2,0,imageBlueChannel(Rect(100,100,logoImage.cols,logoImage.rows)));
//將三個單通道重新合成一個三通道
merge(channels,srcImage);
namedWindow("logo with Blue road",WINDOW_NORMAL);
imshow("logo with Blue road",srcImage);




       Mat  imageGreenChannel;
       logoImage=imread("cloud.jpg",0);
       srcImage=imread("ali.jpg");
       if(!logoImage.data ) { printf("no it is wrong !"); return false; }
       if(!srcImage.data ) { printf("no it is wrong !"); return false; }
       split(srcImage,channels);
       imageGreenChannel=channels.at(1);
       addWeighted(imageGreenChannel(Rect(100,100,logoImage.cols,logoImage.rows)),0.5,
              logoImage,0.5,0,imageGreenChannel(Rect(100,100,logoImage.cols,logoImage.rows)));
       merge(channels,srcImage); 
       namedWindow("Green",WINDOW_NORMAL);
       imshow("Green",srcImage);


    Mat  imageRedChannel;
       logoImage=imread("cloud.jpg",0);
       srcImage=imread("ali.jpg");
       if(!logoImage.data ) { printf("no it is wrong !"); return false; }
       if(!srcImage.data ) { printf("no it is wrong !"); return false; }
       split(srcImage,channels);
       imageRedChannel=channels.at(2);
       addWeighted(imageRedChannel(Rect(100,100,logoImage.cols,logoImage.rows)),1.5,
              logoImage,0.5,0,imageRedChannel(Rect(100,100,logoImage.cols,logoImage.rows)));
       merge(channels,srcImage); 
       namedWindow("Red",WINDOW_NORMAL);
       imshow("Red",srcImage);
return true;
}