opencv 初級圖像混合
阿新 • • 發佈:2019-03-02
end 利用 opencv named 區域 ted \n inf ace
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 }
opencv 初級圖像混合