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 }