根據輸入參數對圖像的某一區域進行部分融合:
package com.csdn.linghu.javacvlean03;
import org.bytedeco.javacpp.opencv_core.IplImage;
import static org.bytedeco.javacpp.opencv_highgui.*;
import static org.bytedeco.javacpp.opencv_core.*;
public class AlphaBlend {
public static void main(String[] args) {
//原始圖像
IplImage srciImageOne = cvLoadImage("resources/srciImageOne.JPG");
//等待融合的圖像
IplImage srciImageTwo = cvLoadImage("resources/srciImageTwo.JPG");
if(srciImageOne ==null ||srciImageTwo==null){
return;
}
//定義
int x =100;
int y=200;
int height = srciImageOne.height();
int width = srciImageOne.width();
double alpha = 0.8;
double beta = 1.0-alpha;
//設置圖像的感興趣區域:二者的感興趣區域大小要一樣
cvSetImageROI(
//源圖像
srciImageOne,
//感興趣區域:一個矩形,從左上角(x,y)到右下角(width, height)的區域
cvRect(x, y, width, height));
//展示圖像srciImageOne的感興趣區域
cvShowImage("AlphaROIOne", srciImageOne);
cvSaveImage("resources/srcImageOne.jpg", srciImageOne);
//設置srciImageTwo感興趣的區域
cvSetImageROI(srciImageTwo, cvRect(x, y, width, height));
//展示圖像srciImageTwo的感興趣區域
cvShowImage("AlphaROITwo", srciImageTwo);
cvSaveImage("resources/srcImageTwo.jpg", srciImageTwo);
cvAddWeighted(
//圖像1,所佔權重
srciImageOne, alpha,
//圖像2,所佔權重
srciImageTwo, beta,
//常數值對輸出結果有影響關係爲:dst(I)=src1(I)*alpha+src2(I)*beta+gamma
0.6,
//輸出結果
srciImageTwo);
//將結果恢復爲原來的大小
cvResetImageROI(srciImageTwo);
cvShowImage("AlphaBlend", srciImageTwo);
cvSaveImage("resources/srcImageTwo.jpg", srciImageTwo);
cvWaitKey();
}
}
處理結果:
感興趣圖像AlphaROIOne
感興趣圖像AlphaROITwo
融合結果:
原始圖片:
說明:在使用cvAddWeighted(...)進行融合時,感興趣的區域必須要相同,不然無法融合