目标检测通过下面5个步骤得出结果
- 读取图像 Cv2.ImRead();
- 使用模板匹配函数 cv2.matchTemplate();
- 获取匹配结果的最大值和最小值的位置 Cv2.MinMaxLoc();
- 绘制矩形框标记匹配结果
- 显示匹配结果
图例(上个扑克牌玩一下)
// 1、读取图像
Mat image = Cv2.ImRead("01.jpg", ImreadModes.Color);
Mat template = Cv2.ImRead("0102.jpg", ImreadModes.Color);
// 2、 使用cv2.matchTemplate()函数进行模板匹配
Mat resultImage = new Mat();
Cv2.MatchTemplate(image, template, resultImage, TemplateMatchModes.CCoeffNormed);
//3、 获取匹配结果的最大值和最小值的位置
double minVal, maxVal;
Point minLoc, maxLoc;
Cv2.MinMaxLoc(resultImage, out minVal, out maxVal, out minLoc, out maxLoc);
//4、绘制矩形框标记匹配结果
Rect rect = new Rect(maxLoc.X, maxLoc.Y, template.Width, template.Height);
Cv2.Rectangle(image, rect, Scalar.Red, 2);
//5、显示匹配结果
Cv2.ImShow("Result", image);
Cv2.WaitKey(0);
看结果
确实匹配到一个爱心,那么爱心只能一个,不甘心再来;
// 1、读取图像
Mat image = Cv2.ImRead("01.jpg", ImreadModes.Color);
Mat template = Cv2.ImRead("0103.jpg", ImreadModes.Color);
// 2、 使用cv2.matchTemplate()函数进行模板匹配
Mat resultImage = new Mat();
Cv2.MatchTemplate(image, template, resultImage, TemplateMatchModes.CCoeffNormed);
//3、 获取匹配结果的最大值和最小值的位置
// 设置匹配阈值
double threshold = 0.81;
// 获取匹配结果的最小值和最大值的位置
while (true)
{
double minVal, maxVal;
Point minLoc, maxLoc;
Cv2.MinMaxLoc(resultImage, out minVal, out maxVal, out minLoc, out maxLoc);
// 如果最大值小于阈值,则退出循环
if (maxVal < threshold)
break;
// 在源图像上绘制矩形框
//4、绘制矩形框标记匹配结果
Rect rect = new Rect(maxLoc.X, maxLoc.Y, template.Width, template.Height);
Cv2.Rectangle(image, rect, Scalar.Green, 1);
// 将匹配结果置为0,以便找到下一个最大值
Cv2.FloodFill(resultImage, maxLoc, Scalar.Black);
}
//5、显示匹配结果
Cv2.ImShow("Result", image);
Cv2.WaitKey(0);
结果出来了
一、读取图像
- 加载目标图像;
- 匹配的特征图像。
imread()读取图像
c# OpenCvSharp读取、显示和写入图像(二)-CSDN博客
二、使用cv2.matchTemplate()函数进行模板匹配
cv2.matchTemplate(image,template,result,method,mask)
matchTemplate()函数在图像处理中常用于目标检测、模板匹配等应用场景.
参数 | 解释 |
---|---|
image | 输入图像,可以是任意尺寸和通道数的图像。 |
template | 模板图像,必须与输入图像具有相同的通道数。 |
result | 输出图像,用于存储匹配结果。 |
method | 匹配方法,指定如何计算输入图像和模板图像之间的匹配程度。(方法如下表) |
mask | 可选参数,指定一个掩码图像,在匹配过程中只考虑掩码区域。 |
method方法
三、获取匹配结果的最大值和最小值的位置
Cv2.MinMaxLoc(src, out minVal, out maxVal, out minLoc, out maxLoc);
Cv2.MinMaxLoc()是一个用于查找数组(或图像)中最小值、最大值及其位置的函数。它通常用于查找数组的范围或在图像上定位最亮和最暗的点。
参数 | 解释 |
---|---|
src | 输入图像(单通道,灰度图像) |
minVal |
图像中的最小值 |
maxVal |
图像中的最大值 |
minLoc |
最小值的位置(x,y)坐标 |
maxLoc |
最大值的位置(x,y)坐标 |
mask | 可选参数,指定一个掩码图像,在匹配过程中只考虑掩码区域。 |
四、绘制矩形框标记匹配结果
Cv2.Rectangle()绘制矩形
c# OpenCvSharp基本绘画(直线、椭圆、矩形、圆、多边形、文本)(四)-CSDN博客
五、显示匹配结果
Cv2.ImShow()窗口中显示图像
c# OpenCvSharp读取、显示和写入图像(二)-CSDN博客
通过掌握这五个步骤,你可以在C#中使用OpenCvSharp实现目标检测。祝你成功!文章来源:https://www.toymoban.com/news/detail-829373.html
c# OpenCV相关文章目录
c# OpenCvSharp安装(一)
c# OpenCvSharp读取、显示和写入图像(二)
c# OpenCvSharp图像裁剪、调整大小、旋转、透视(三)
c# OpenCvSharp基本绘画(直线、椭圆、矩形、圆、多边形、文本)(四)
c# OpenCvSharp 检测(斑点检测、边缘检测、轮廓检测)(五)
c# OpenCvSharp 轮廓绘制六步骤你学会了吗(六)
c# OpenCvSharp 目标检测五个步骤(又学会了)(七)
c# OpenCvSharp透视矫正六步实现透视矫正(八)
c# OpenCvSharp Cv2.Threshold()和Cv2.AdaptiveThreshold参数说明
c# OpenCvSharp透视矫正参数调整器文章来源地址https://www.toymoban.com/news/detail-829373.html
到了这里,关于c# OpenCvSharp 目标检测五个步骤(又学会了)(七)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!