學習javacv之五:圖像的Alpha融合

根據輸入參數對圖像的某一區域進行部分融合:

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(...)進行融合時,感興趣的區域必須要相同,不然無法融合

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章