赞
踩
本文测试环境:
win10 64位
vistual studio 2019
Emgu CV 4.6.0
环境配置准备:
1 新增控制台项目,.net framework为4.7.2
2 把win-x64目录的native目录下的文件全部拷贝到项目的运行目录Debug目录下
3 项目选择x64
4 添加项目引用Emgu.CV.dll、Emgu.CV.Platform.NetFramework.dll、System.Drawing.dll和System.Runtime.InteropServices.RuntimeInformation.dll
具体配置参考:
Emgu CV4图像处理之环境搭建1(C#)_zxy2847225301的博客-CSDN博客
下面内容部分参考自:
EmguCV-第11讲-ROI与mask掩码_YADONCHEN的博客-CSDN博客_emgucv 掩模
【OpenCV学习笔记】十三、ROI与mask掩码_zlm丶的博客-CSDN博客_mask掩码
ROI:个人理解是,从原图中,截取指定矩形区域的内容
代码例子:
chunfen1.png原图
Logo.png原图
- using Emgu.CV;
- using Emgu.CV.Structure;
- using Emgu.CV.Util;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace EmguCVDemo2
- {
- class Program
- {
- static void Main(string[] args)
- {
-
- Mat srcPic = new Mat("chunfen1.png");
- Mat logo = new Mat("Logo.png");
- ROITest(srcPic, logo);
-
- CvInvoke.WaitKey(0);
- Console.ReadLine();
- }
-
-
- private static void ROITest(Mat srcPic, Mat logo)
- {
- Mat imgROI = new Mat(srcPic, new System.Drawing.Rectangle(20, 20, logo.Cols, logo.Rows));
- CvInvoke.Imshow("imgROI", imgROI);
- CvInvoke.WaitKey(0);
- }
- }
- }
运行结果如下:
mask遮罩
初级融入:个人理解是,把一张小的图片(一般为Logo图片),原封不动地替换到原图ROI对应的位置
代码如下:
- using Emgu.CV;
- using Emgu.CV.Structure;
- using Emgu.CV.Util;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace EmguCVDemo2
- {
- class Program
- {
- static void Main(string[] args)
- {
-
- Mat srcPic = new Mat("chunfen1.png");
- Mat logo = new Mat("Logo.png");
- PrimaryROI(srcPic, logo);
- CvInvoke.WaitKey(0);
- Console.ReadLine();
- }
-
-
-
- /// <summary>
- /// 初级融合
- /// </summary>
- /// <param name="srcPic"></param>
- /// <param name="logo"></param>
- public static void PrimaryROI(Mat srcPic,Mat logo)
- {
- Mat imgROI = new Mat(srcPic, new System.Drawing.Rectangle(20, 20, logo.Cols, logo.Rows));
- logo.CopyTo(imgROI);
- CvInvoke.Imshow("srcPic", srcPic);
- CvInvoke.WaitKey(0);
- }
-
-
- }
- }
运行结果如下图:
看到没有,把Logo图塞进原来ROI的位置了
圆形融合:个人理解是把遮罩的形状变成圆形,看起来圆滑一点
代码如下:
- using Emgu.CV;
- using Emgu.CV.Structure;
- using Emgu.CV.Util;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace EmguCVDemo2
- {
- class Program
- {
- static void Main(string[] args)
- {
-
- Mat srcPic = new Mat("chunfen1.png");
- Mat logo = new Mat("Logo.png");
-
- CicleROI(srcPic, logo);
-
-
- CvInvoke.WaitKey(0);
- Console.ReadLine();
- }
-
-
- /// <summary>
- /// 圆形ROI
- /// </summary>
- /// <param name="srcPic"></param>
- /// <param name="logo"></param>
- private static void CicleROI(Mat srcPic, Mat logo)
- {
- Mat imgROI = new Mat(srcPic, new System.Drawing.Rectangle(20, 20, logo.Cols, logo.Rows));
- //定义了一个长为logo.Cols,宽为logo.Rows的矩形遮罩
- Mat mask = Mat.Zeros(logo.Rows, logo.Cols, Emgu.CV.CvEnum.DepthType.Cv8U, 3);
- CvInvoke.Imshow("mask_rec", mask);
- CvInvoke.Circle(mask, new System.Drawing.Point(logo.Size.Width/2, logo.Size.Height / 2), logo.Size.Width / 2, new MCvScalar(255,255,255),-1);
- CvInvoke.Imshow("draw_cicle", mask);
-
- logo.CopyTo(imgROI, mask);
- CvInvoke.Imshow("srcPic", srcPic);
- CvInvoke.WaitKey(0);
- }
- }
- }
运行结果如下图:
高级融合:个人理解是把一张图(一般为Logo图)塞进另外一张图,Logo图比较特别,背景色一般为纯色(白色),然后把Logo取反后二值化,即把背景色去掉了,只留下Logo重要的内容
代码如下:
- using Emgu.CV;
- using Emgu.CV.Structure;
- using Emgu.CV.Util;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace EmguCVDemo2
- {
- class Program
- {
- static void Main(string[] args)
- {
-
- Mat srcPic = new Mat("chunfen1.png");
- Mat logo = new Mat("Logo.png");
- HightROI(srcPic, logo);
-
- CvInvoke.WaitKey(0);
- Console.ReadLine();
- }
-
-
-
-
- /// <summary>
- /// 高级融入
- /// </summary>
- /// <param name="srcPic"></param>
- /// <param name="logo"></param>
- public static void HightROI(Mat srcPic, Mat logo)
- {
- Mat imgROI = new Mat(srcPic, new System.Drawing.Rectangle(20, 20, logo.Cols, logo.Rows));
- Mat mask = logo.Clone();
- //对遮罩取反
- CvInvoke.BitwiseNot(mask, mask);
- //对遮罩进行二值化处理
- CvInvoke.Threshold(mask, mask, 100, 255, Emgu.CV.CvEnum.ThresholdType.Binary);
-
- CvInvoke.Imshow("mask", mask);
- logo.CopyTo(imgROI,mask);
- CvInvoke.Imshow("srcPic", srcPic);
- CvInvoke.WaitKey(0);
- }
- }
- }
运行结果如下图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。