opencv 初级图像混合

  1 #include <opencv2/core/core.hpp>
  2 #include <opencv2/highgui/highgui.hpp>
  3 #include <iostream>
  4 
  5 using namespace cv;
  6 using namespace std;
  7 
  8 
  9 
 10 bool ROI_AddImage()
 11 {
 12 
 13     // 【1】读入图像
 14     Mat srcImage1 = imread("dota_pa.jpg");
 15     Mat logoImage = imread("dota_logo.jpg");
 16     if( !srcImage1.data ) { printf("读取srcImage1错误~! \n"); return false; }
 17     if( !logoImage.data ) { printf("读取logoImage错误~! \n"); return false; }
 18 
 19     // 【2】定义一个Mat类型并给其设定ROI区域
 20     Mat imageROI = srcImage1(Rect(100, 150, logoImage.cols, logoImage.rows));
 21 
 22     // 【3】加载掩模(必须是灰度图)
 23     Mat mask = imread("dota_logo.jpg", 0);
 24 
 25     //【4】将掩膜拷贝到ROI
 26     logoImage.copyTo(imageROI, mask);
 27 
 28     // 【5】显示结果
 29     namedWindow("<1>利用ROI实现图像叠加示例窗口");
 30     imshow("<1>利用ROI实现图像叠加示例窗口",srcImage1);
 31 
 32     return true;
 33 }
 34 
 35 
 36 bool  LinearBlending()
 37 {
 38     //【0】定义一些局部变量
 39     double alphaValue = 0.5; 
 40     double betaValue;
 41     Mat srcImage2, srcImage3, dstImage;
 42 
 43     // 【1】读取图像 ( 两幅图片需为同样的类型和尺寸 )
 44     srcImage2 = imread("mogu.jpg");
 45     srcImage3 = imread("rain.jpg");
 46 
 47     if( !srcImage2.data ) { printf("读取srcImage2错误! \n"); return false; }
 48     if( !srcImage3.data ) { printf("读取srcImage3错误! \n"); return false; }
 49 
 50     // 【2】进行图像混合加权操作
 51     betaValue = ( 1.0 - alphaValue );
 52     addWeighted( srcImage2, alphaValue, srcImage3, betaValue, 0.0, dstImage);
 53 
 54     // 【3】显示原图窗口
 55     imshow( "<2>线性混合示例窗口【原图】", srcImage2 );
 56     imshow( "<3>线性混合示例窗口【效果图】", dstImage );
 57 
 58     return true;
 59 }
 60 
 61 
 62 bool  ROI_LinearBlending()
 63 {
 64 
 65     //【1】读取图像
 66     Mat srcImage4 = imread("dota_pa.jpg", 1);
 67     Mat logoImage = imread("dota_logo.jpg");
 68 
 69     if( !srcImage4.data ) { printf("读取srcImage4错误~! \n"); return false; }
 70     if( !logoImage.data ) { printf("读取logoImage错误~! \n"); return false; }
 71 
 72     //【2】定义一个Mat类型并给其设定ROI区域
 73     Mat imageROI;
 74     //方法一
 75     imageROI= srcImage4(Rect(100, 150, logoImage.cols, logoImage.rows));
 76     //方法二
 77     //imageROI= srcImage4(Range(250,250+logoImage.rows),Range(200,200+logoImage.cols));
 78 
 79     //【3】将logo加到原图上
 80     addWeighted(imageROI, 0.5, logoImage, 0.3, 0., imageROI);
 81 
 82     //【4】显示结果
 83     imshow("<4>区域线性图像混合示例窗口", srcImage4);
 84 
 85     return true;
 86 }
 87 
 88 
 89 
 90 int main()
 91 {
 92 
 93     if(ROI_AddImage() && LinearBlending() && ROI_LinearBlending())
 94     {
 95         cout << endl << "\n运行成功,得出了需要的图像~!";
 96     }
 97 
 98     waitKey(0);
 99     return 0;
100 }

 

 

 

posted @ 2019-03-02 21:04  hehe_2014  阅读(158)  评论(0编辑  收藏  举报