1 ROI
2 mask掩码
3 代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using Emgu.Util;
using System.Drawing;
namespace Lesson11
{
class Program
{
static void Main(string[] args)
{
#region ROI区域的设置与保存
//Mat img = CvInvoke.Imread("1.jpg");
//CvInvoke.Imshow("img", img);
Mat ROI = new Mat(img, new Rectangle(213, 236, 494, 246)).Clone();//方法一,注意浅拷贝
//Mat ROI = new Mat(img, new Range(236, 236 + 246), new Range(213, 213 + 494)).Clone();//方法二
//CvInvoke.MedianBlur(ROI, ROI, 15); //中值滤波
//CvInvoke.Imshow("ROI", ROI);
//CvInvoke.Imwrite("roi.jpg", ROI);
//CvInvoke.WaitKey(0);
#endregion
#region 直接融合
//Mat img = CvInvoke.Imread("1.jpg");
//Mat logo = CvInvoke.Imread("opencv.jpg");
CvInvoke.Imshow("img", img);
CvInvoke.Imshow("logo", logo);
CvInvoke.WaitKey(0);
//Mat ROI = new Mat(img, new Rectangle(10, 10, logo.Cols, logo.Rows));
ROI = logo.Clone(); //将logo的所有信息拷贝到ROI
//logo.CopyTo(ROI); //将logo的数据区拷贝到ROI(位置)
//CvInvoke.Imshow("roi", ROI);
//CvInvoke.Imshow("result", img);
//CvInvoke.WaitKey(0);
#endregion
#region 掩码融合
//Mat img = CvInvoke.Imread("1.jpg");
//Mat logo = CvInvoke.Imread("opencv.jpg");
CvInvoke.Imshow("src", img);
CvInvoke.Imshow("logo", logo);
//Mat mask = new Mat();//8位单通道图像
//CvInvoke.CvtColor(logo, mask, ColorConversion.Bgr2Gray);//彩色转灰度图
//CvInvoke.BitwiseNot(mask, mask); //逻辑非
//CvInvoke.Imshow("bitwise_not", mask);
//CvInvoke.Threshold(mask, mask, 100, 255, ThresholdType.Binary); //二值化
//CvInvoke.Imshow("threshold", mask);
//Mat ROI = new Mat(img, new Rectangle(10, 10, logo.Cols, logo.Rows));
//logo.CopyTo(ROI, mask); //将logo的数据区拷贝到ROI
//CvInvoke.Imshow("roi", ROI);
//CvInvoke.Imshow("result", img);
//CvInvoke.WaitKey(0);
#endregion
#region 自己创建掩码
//Mat img = CvInvoke.Imread("1.jpg");
//Mat logo = CvInvoke.Imread("lena.jpg");
CvInvoke.Imshow("src", img);
CvInvoke.Imshow("logo", logo);
//Mat mask = Mat.Zeros(logo.Rows, logo.Cols, DepthType.Cv8U, 1); //创建和logo图片同样大小的全黑图像
//CvInvoke.Circle(mask, new Point(logo.Rows / 2, logo.Cols / 2), 180, new MCvScalar(255), -1);
//Mat ROI = new Mat(img, new Rectangle(0, 0, logo.Cols, logo.Rows));
//logo.CopyTo(ROI, mask);//将logo的数据区拷贝到ROI
//CvInvoke.Imshow("result", img);
//CvInvoke.WaitKey(0);
#endregion
Mat img = CvInvoke.Imread("1.jpg");
Mat logo = CvInvoke.Imread("lena.jpg");
CvInvoke.Imshow("src", img);
CvInvoke.Imshow("logo", logo);
Mat mask = CvInvoke.Imread("mask.jpg", 0); //以灰度模式加载
CvInvoke.Threshold(mask, mask, 200, 255, ThresholdType.Binary);
Mat ROI = new Mat(img, new Rectangle(150, 20, logo.Cols, logo.Rows));
logo.CopyTo(ROI, mask);
CvInvoke.Imshow("result", img);
CvInvoke.WaitKey(0);
}
}
}