影象處理算法系列 第五章 影象合成
阿新 • • 發佈:2019-02-12
這篇文章將講述圖片合成的例子。
如何將兩個圖片合成一張圖片呢?
這個問題看起來很深奧,包括ps上面其實用的最多的東西也屬於圖片合成技術。
但是線性的圖片合成其實很簡單。
一原理:
兩個圖片的融合,首先兩個圖片大小必須一致,如果不一致怎麼辦,要使用ROI區域,找到大圖片中要和小圖片進行融合的尺寸。兩個圖片的畫素值,按照給定的比例進行疊加,就可以將兩個圖片融合起來。
二演算法:
演算法很簡單,通過原理可以很簡單的看到演算法的實現,這裡不羅嗦了,想了解更多的請看:三 程式碼
void blendTwoImage(Mat src1,float alpa, Mat src2, float beta, float gama, Mat &dst) { dst.create(src1.size(),src1.type()); uchar *psrc1; uchar *psrc2; uchar *pdst; int channels = src1.channels(); std::cout<<src1.rows<<" "<<src1.cols<<std::endl; for (int i = 0; i<src1.rows; i++) { psrc1 = src1.ptr<uchar>(i); psrc2 = src2.ptr<uchar>(i); pdst = dst.ptr<uchar>(i); for (int j =0; j <src1.cols; j++) { int B; int G; int R; B = psrc1[j*channels] *alpa + psrc2[j*channels] *beta + gama; G = psrc1[j*channels + 1] *alpa + psrc2[j*channels + 1] *beta + gama; R = psrc1[j*channels + 2] *alpa + psrc2[j*channels + 2] *beta + gama; if (B>255) B = 255; if (G>255) G = 255; if (R>255) R = 255; pdst[j*channels] = B; pdst[j*channels + 1] = G; pdst[j*channels + 2] = R; //std::cout<<i<<" " <<j<<std::endl; } } }
四效果圖
原始 | 本文 |