0


AI学习笔记系列第四章OpenCVSharp实操——大图找小图

.Net AI学习笔记系列

第四章 OpenCVSharp实操——大图找小图


文章目录


前言

本文主要介绍使用MatchTemplate方法进行模板匹配,在一张大图中匹配定位小图。


一、OpenCVSharp实操——大图找小图

示例展示了一步一步在一张大图中找到小图并标注出来。

二、步骤

1.开发工具

    VS2019+.net 4.8+OpenCvSharp4

2.引入库

Install-Package OpenCvSharp4

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;
using OpenCvSharp.Extensions;

3.示例代码

代码如下(示例):

//1.加载大图(refMat)和小图(tplMat)
    Mat refMat = BitmapConverter.ToMat((Bitmap)this.pictureBox1.Image);//大图
    Mat tplMat = BitmapConverter.ToMat((Bitmap)this.pictureBox2.Image);//小图//2.创建一个结果矩阵(res),用于存储模板匹配的结果
     Mat res = new Mat(refMat.Rows - tplMat.Rows +1, refMat.Cols - tplMat.Cols +1, MatType.CV_32FC1);//3.将输入图像(大图和小图)转换为灰度图像
     Mat gref = refMat.CvtColor(ColorConversionCodes.BGR2GRAY);
     Mat gtpl = tplMat.CvtColor(ColorConversionCodes.BGR2GRAY);//4.使用MatchTemplate方法进行模板匹配,并使用Threshold方法对结果进行阈值处理
     Cv2.MatchTemplate(gref, gtpl, res, TemplateMatchModes.CCoeffNormed);
     Cv2.Threshold(res, res,0.8,1.0, ThresholdTypes.Tozero);//5.使用while循环查找所有匹配位置,并在大图上绘制矩形框while(true){double minval, maxval, threshold =0.8;
         OpenCvSharp.Point minloc, maxloc;
         Cv2.MinMaxLoc(res, out minval, out maxval, out minloc, out maxloc);if(maxval >= threshold){// 设置绘制矩形的位置和大小
             Rect r = new Rect(new OpenCvSharp.Point(maxloc.X, maxloc.Y), new OpenCvSharp.Size(tplMat.Width, tplMat.Height));
             Console.WriteLine(maxloc.X);// 在大图上绘制矩形
             Cv2.Rectangle(refMat, r, Scalar.Red,2);// 填充结果矩阵,以避免在MinMaxLoc中再次找到相同区域
             Rect outRect;
             Cv2.FloodFill(res, maxloc, new Scalar(0), out outRect, new Scalar(0.1), new Scalar(1.0));}elsebreak;}//6.显示结果
    this.pictureBox3.Image = BitmapConverter.ToBitmap(refMat);
    this.pictureBox3.Refresh();

4.运行效果

在这里插入图片描述

总结

本文的目的是为下一步自动解锁滑动验证码做准备,处理相对来说也不复杂,主要是使用MatchTemplate方法进行模板匹配,并使用Threshold方法对结果进行阈值处理。从而准确定位小图位置。如有不足之处,请大家不吝指点!


本文转载自: https://blog.csdn.net/brooth123/article/details/139528620
版权归原作者 brooth123 所有, 如有侵权,请联系我们删除。

“AI学习笔记系列第四章OpenCVSharp实操——大图找小图”的评论:

还没有评论