机器视觉OpenCVSharp图像叠加
图像叠加
这里会涉及到一个函数copyto( ):Copy the matrix to another one.将矩阵复制到另一个。
publicvoid CopyTo(Mat m); //原封不动的叠加上去
publicvoid CopyTo(Mat m, Mat mask); //使用掩码进行叠加
------------------------CopyTo(Mat m) --------------------- Mat img9=newMat(@"D:\Users\FengJianming\C#\OpenCVSharp\OpenCVSharp\hk.jpg",ImreadModes.AnyColor);
Rect rectROI = newRect(500, 500, 300, 400); //使用rect确定兴趣区域
Mat imgROI = newMat(img9, rectROI); //新建一个mat,把ROI内的图像加载到里面去
Rect rect1 = newRect(0, 0, imgROI.Cols, imgROI.Rows); // //定义一个矩形,前2个参数是要放的位置起点,后面是插入图片的大小
Mat pos = newMat(img9, rect1);
imgROI.CopyTo(pos); //将ROI区域的图像叠加至目标位置
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);//复制的目标位置
Mat pos = newMat(img9, rect);
imgROI.CopyTo(pos,mask);//掩码黑色的区域不复制
CV2.ImShow("mask", mask);
CV2.ImShow("img9", img9);
CvtColor是颜色转换,颜色空间转换的函数,例如把BGR(注意opencv是BGR而不是RGB)和HSV互转。当然彩色变灰色也可以。
Threshold阈值函数,五个参数分别是源,目的地,阈值,最大值,阈值类型。阈值类型有binary和binaryinv,binary的时候是某个像素的灰度大于阈值的时候,这个像素的灰度变成最大值,小于的时候则为0;binaryinv的时候与之相反。

