opencv影象線性混合操作
阿新 • • 發佈:2019-02-15
影象線性混合的數學原理
G(x)=(1-a)F(x)+aQ(x)
注意事項:
1,a的取值範圍為0到1之間
2,F(x)和Q(x)為參與混合的兩幅影象,G(x)表示輸出影象
3,通過對兩幅影象的每個畫素值做線性加權得到最終的輸出影象
4,兩幅影象的大小和型別必須完全一致,如果把影象當成一個矩陣
則兩個矩陣相加的前提是維度必須一致,否則沒有相加的意義。
示例
第一幅參與混合的影象
第二幅參與混合的影象
混合結果
通過混合產生了煙雨朦朧的效果
程式碼實現
#include <opencv2\core\core.hpp> #include <opencv2\imgcodecs.hpp> #include <opencv2\opencv.hpp> #include <opencv2\highgui\highgui.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char** args) { Mat src1, src2, dst; src1 = imread("mogu.jpg"); src2 = imread("rain.jpg"); if (!src1.data) { printf("影象載入錯誤"); return -1; } if (!src2.data) { printf("影象載入錯誤"); return -1; } double alpha = 0.5;//混合權重 //混合的兩幅影象寬高和型別必須完全一致 if (src1.rows==src2.rows &&src1.cols==src2.cols &&src1.type()==src2.type()) { addWeighted(src1,alpha,src2,(1.0-alpha),0.0,dst);//線性混合 //add(src1,src2,dst);//相加 //multiply(src1,src2,dst);//相乘 imshow("原圖-1", src1); imshow("原圖-2",src2); imshow("混合後的圖",dst); } else{ printf("兩幅影象的大小或者型別不一致,不能混合!"); return -1; } waitKey(0); return 0; }