AI学习笔记系列第四章OpenCVSharp实操——大图找小图
brooth123 2024-07-31 14:01:04 阅读 86
.Net AI学习笔记系列
第四章 OpenCVSharp实操——大图找小图
文章目录
.Net AI学习笔记系列前言一、OpenCVSharp实操——大图找小图二、步骤1.开发工具2.引入库3.示例代码4.运行效果
总结
前言
本文主要介绍使用MatchTemplate方法进行模板匹配,在一张大图中匹配定位小图。
一、OpenCVSharp实操——大图找小图
示例展示了一步一步在一张大图中找到小图并标注出来。
二、步骤
1.开发工具
<code>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));
}
else
break;
}
//6.显示结果
this.pictureBox3.Image = BitmapConverter.ToBitmap(refMat);
this.pictureBox3.Refresh();
4.运行效果
总结
本文的目的是为下一步自动解锁滑动验证码做准备,处理相对来说也不复杂,主要是使用MatchTemplate方法进行模板匹配,并使用Threshold方法对结果进行阈值处理。从而准确定位小图位置。如有不足之处,请大家不吝指点!
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。