当前位置:   article > 正文

Emgu CV4图像处理之ROI与mask掩码10(C#)_emgucv roi

emgucv roi

本文测试环境:

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原图

 

 

  1. using Emgu.CV;
  2. using Emgu.CV.Structure;
  3. using Emgu.CV.Util;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace EmguCVDemo2
  11. {
  12. class Program
  13. {
  14. static void Main(string[] args)
  15. {
  16. Mat srcPic = new Mat("chunfen1.png");
  17. Mat logo = new Mat("Logo.png");
  18. ROITest(srcPic, logo);
  19. CvInvoke.WaitKey(0);
  20. Console.ReadLine();
  21. }
  22. private static void ROITest(Mat srcPic, Mat logo)
  23. {
  24. Mat imgROI = new Mat(srcPic, new System.Drawing.Rectangle(20, 20, logo.Cols, logo.Rows));
  25. CvInvoke.Imshow("imgROI", imgROI);
  26. CvInvoke.WaitKey(0);
  27. }
  28. }
  29. }

 运行结果如下:

 

mask遮罩

在这里插入图片描述 

初级融入:个人理解是,把一张小的图片(一般为Logo图片),原封不动地替换到原图ROI对应的位置

代码如下:

  1. using Emgu.CV;
  2. using Emgu.CV.Structure;
  3. using Emgu.CV.Util;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace EmguCVDemo2
  11. {
  12. class Program
  13. {
  14. static void Main(string[] args)
  15. {
  16. Mat srcPic = new Mat("chunfen1.png");
  17. Mat logo = new Mat("Logo.png");
  18. PrimaryROI(srcPic, logo);
  19. CvInvoke.WaitKey(0);
  20. Console.ReadLine();
  21. }
  22. /// <summary>
  23. /// 初级融合
  24. /// </summary>
  25. /// <param name="srcPic"></param>
  26. /// <param name="logo"></param>
  27. public static void PrimaryROI(Mat srcPic,Mat logo)
  28. {
  29. Mat imgROI = new Mat(srcPic, new System.Drawing.Rectangle(20, 20, logo.Cols, logo.Rows));
  30. logo.CopyTo(imgROI);
  31. CvInvoke.Imshow("srcPic", srcPic);
  32. CvInvoke.WaitKey(0);
  33. }
  34. }
  35. }

 运行结果如下图:

看到没有,把Logo图塞进原来ROI的位置了

圆形融合:个人理解是把遮罩的形状变成圆形,看起来圆滑一点

代码如下:

  1. using Emgu.CV;
  2. using Emgu.CV.Structure;
  3. using Emgu.CV.Util;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace EmguCVDemo2
  11. {
  12. class Program
  13. {
  14. static void Main(string[] args)
  15. {
  16. Mat srcPic = new Mat("chunfen1.png");
  17. Mat logo = new Mat("Logo.png");
  18. CicleROI(srcPic, logo);
  19. CvInvoke.WaitKey(0);
  20. Console.ReadLine();
  21. }
  22. /// <summary>
  23. /// 圆形ROI
  24. /// </summary>
  25. /// <param name="srcPic"></param>
  26. /// <param name="logo"></param>
  27. private static void CicleROI(Mat srcPic, Mat logo)
  28. {
  29. Mat imgROI = new Mat(srcPic, new System.Drawing.Rectangle(20, 20, logo.Cols, logo.Rows));
  30. //定义了一个长为logo.Cols,宽为logo.Rows的矩形遮罩
  31. Mat mask = Mat.Zeros(logo.Rows, logo.Cols, Emgu.CV.CvEnum.DepthType.Cv8U, 3);
  32. CvInvoke.Imshow("mask_rec", mask);
  33. 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);
  34. CvInvoke.Imshow("draw_cicle", mask);
  35. logo.CopyTo(imgROI, mask);
  36. CvInvoke.Imshow("srcPic", srcPic);
  37. CvInvoke.WaitKey(0);
  38. }
  39. }
  40. }

运行结果如下图:

高级融合:个人理解是把一张图(一般为Logo图)塞进另外一张图,Logo图比较特别,背景色一般为纯色(白色),然后把Logo取反后二值化,即把背景色去掉了,只留下Logo重要的内容

代码如下:

  1. using Emgu.CV;
  2. using Emgu.CV.Structure;
  3. using Emgu.CV.Util;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace EmguCVDemo2
  11. {
  12. class Program
  13. {
  14. static void Main(string[] args)
  15. {
  16. Mat srcPic = new Mat("chunfen1.png");
  17. Mat logo = new Mat("Logo.png");
  18. HightROI(srcPic, logo);
  19. CvInvoke.WaitKey(0);
  20. Console.ReadLine();
  21. }
  22. /// <summary>
  23. /// 高级融入
  24. /// </summary>
  25. /// <param name="srcPic"></param>
  26. /// <param name="logo"></param>
  27. public static void HightROI(Mat srcPic, Mat logo)
  28. {
  29. Mat imgROI = new Mat(srcPic, new System.Drawing.Rectangle(20, 20, logo.Cols, logo.Rows));
  30. Mat mask = logo.Clone();
  31. //对遮罩取反
  32. CvInvoke.BitwiseNot(mask, mask);
  33. //对遮罩进行二值化处理
  34. CvInvoke.Threshold(mask, mask, 100, 255, Emgu.CV.CvEnum.ThresholdType.Binary);
  35. CvInvoke.Imshow("mask", mask);
  36. logo.CopyTo(imgROI,mask);
  37. CvInvoke.Imshow("srcPic", srcPic);
  38. CvInvoke.WaitKey(0);
  39. }
  40. }
  41. }

 运行结果如下图:

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/1001618
推荐阅读
相关标签
  

闽ICP备14008679号