機(jī)器視覺OpenCVSharp圖像疊加
圖像疊加
???這里會涉及到一個函數(shù)copyto( ):Copy the?matrix to another one.將矩陣復(fù)制到另一個。
? ??publicvoid CopyTo(Mat m);??? //原封不動的疊加上去
? publicvoid CopyTo(Mat m, Mat mask);? ?//使用掩碼進(jìn)行疊加
------------------------CopyTo(Mat m) ---------------------?Mat?img9=newMat(@"D:\Users\FengJianming\C#\OpenCVSharp\OpenCVSharp\hk.jpg",ImreadModes.AnyColor);
Rect?rectROI =?newRect(500, 500, 300, 400);???//使用rect確定興趣區(qū)域
Mat?imgROI =?newMat(img9, rectROI);???//新建一個mat,把ROI內(nèi)的圖像加載到里面去
Rect?rect1 =?newRect(0, 0, imgROI.Cols, imgROI.Rows);???// //定義一個矩形,前2個參數(shù)是要放的位置起點,后面是插入圖片的大小
?Mat?pos =?newMat(img9, rect1);
?imgROI.CopyTo(pos);??//將ROI區(qū)域的圖像疊加至目標(biāo)位置
CV2.ImShow("img", img9);
Mat?img9=?newMat(@"D:\Users\FengJianming\C#\OpenCVSharp\OpenCVSharp\hk.jpg",ImreadModes.AnyColor);
??Mat?imgROI=newMat(@"D:\Users\FengJianming\C#\OpenCVSharp\OpenCVSharp\logo.jpg",ImreadModes.Color);//讀取貼圖
Mat?mask =imgROI.CvtColor(ColorConversionCodes.BGR2GRAY);//新建一個掩碼接收變成灰度圖的貼圖
CV2.Threshold(mask, mask, 125,255,?ThresholdTypes.BinaryInv);//灰度圖二值化,高于125的變成黑色,其它白色
Rect?rect =?newRect(0, 0, imgROI.Cols,imgROI.Rows);//復(fù)制的目標(biāo)位置
Mat?pos =?newMat(img9, rect);
imgROI.CopyTo(pos,mask);//掩碼黑色的區(qū)域不復(fù)制
CV2.ImShow("mask", mask);
CV2.ImShow("img9", img9);
CvtColor是顏色轉(zhuǎn)換,顏色空間轉(zhuǎn)換的函數(shù),例如把BGR(注意opencv是BGR而不是RGB)和HSV互轉(zhuǎn)。當(dāng)然彩色變灰色也可以。
Threshold閾值函數(shù),五個參數(shù)分別是源,目的地,閾值,最大值,閾值類型。閾值類型有binary和binaryinv,binary的時候是某個像素的灰度大于閾值的時候,這個像素的灰度變成最大值,小于的時候則為0;binaryinv的時候與之相反。