1. 程式人生 > >OPENCV中定義ROI區域以及ROI區域的相關融合(程式解讀)

OPENCV中定義ROI區域以及ROI區域的相關融合(程式解讀)

1.定義ROI區域 region of interest
2.用addWeighted函式進行影象混合
感興趣區域的定義方法:
1.第一種是使用表示矩形的區域ROI,Rect指定矩形的左上角座標,和矩形的長寬,.cols,.rows定義的
Mat imageROI;
imgROI=image(Rect(0,0,XX.cols,XX.rows));
2.第二種是區域的選取:
imageROI=image(Range(0,XX.rows),Range(0,XX.cols));
顯示如何利用ROI區域將一幅影象加到另一幅影象的指定位置,是加到不是融合;
bool ROI_AddImage()
{
Mat img1=imread(“1.jpg”);
Mat img2=imread(“2.jpg”);
if(!img1.data){printf(“載入圖片1出錯”);return false;}
if(!img2.data){printf(“載入圖片2出錯”);return false;}

Mat imgROI=img1(Rect(0,0,img2.cols,img2.rows));

Mat mask=imread(“img2”,0);
img2.copyTo(imgROI,mask);//把影象放到指定區域中 mask可有可無,記住mask有的話就會使新增到指定區域更加逼真
imshow(“影象融合1”,img2); //影象融合的過程必須是相同大小的圖片和圖片的型別相同
return true;
}
將一幅影象新增到指定的區域
第二章:影象的線性混合操作
線性混合是一個典型的二元的畫素操作:理論公式為:
g(x)=(1-a)f1(x)+af2(x); 前面的係數代表了影象混合的響應比例
採用的函式就是:addWeighted();
計算陣列加權和:addWeighted();函式
addWeighted(1,2,3,4,5,6,7);1:輸入的第一幅圖片,2:第一幅圖片的權重,3:輸入第二幅圖片,4:第二幅圖片的權重,5:一個加到權重總和上的標量值,6:輸出融合之後的圖片,7:輸出陣列的深度,這個深度是可以選擇的
進行影象加權融合的時候必須要兩幅影象的尺寸大小相同,影象的型別是一致的
bool linerBlending()
{
Mat img3=imread(“3.jpg”);
Mat img4=imread(“4.jpg”);
if(!img3.data){printf(“載入圖片3錯誤”);return false;}
if(!img4.data){printf(“載入圖片4錯誤”);return false;}
Mat dstImage;
double alphaValue=0.3;
double betaValue=(1-alphaValue);
addWeighted(img3,alphaValue,img4,betaValue,0.0,dstImage);
imshow(“線性融合影象”,dstImage);
}
初級影象的融合:指定區域的影象線性融合
bool ROI_LinerBlending()
{
Mat img5=imread(“5.jpg”);
Mat img6=imread(“6.jpg”);
Mat dst1Image;
if(!img5.data){printf(“載入圖片5錯誤”);return false;}
if(!img6.data){printf(“載入圖片6錯誤”);return false;}
Mat img2ROI=img6(Rect(0,0,img5.cols,img5.rows));
addWeighted(img5,0.4,img2ROI,0.7,0.0,dst1Image);
imshow(“指定區域的線性融合”,img6);
return true;
}
指定區域的線性影象融合;