c# OpenCvSharp 目标检测五个步骤(又学会了)(七)

目标检测通过下面5个步骤得出结果

  1. 读取图像 Cv2.ImRead();
  2. 使用模板匹配函数 cv2.matchTemplate();
  3. 获取匹配结果的最大值和最小值的位置 Cv2.MinMaxLoc();
  4. 绘制矩形框标记匹配结果
  5. 显示匹配结果

图例(上个扑克牌玩一下)

// 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实现目标检测。祝你成功!

  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透视矫正参数调整器

  • 22
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
缺陷检测是指通过图像处理和分析技术来检测物体表面的缺陷或异常。在C#中,可以使用OpenCvSharp库来实现缺陷检测。引用\[1\]中的博客文章介绍了如何使用OpenCvSharp实现瓶口缺陷检测。该文章提供了详细的步骤和代码示例,包括图像预处理、差分图像计算、阈值化、轮廓查找和标注等。你可以参考该文章来了解如何在C#中使用OpenCvSharp进行缺陷检测。引用\[2\]中的博客文章介绍了如何使用OpenCvSharp和OCR技术实现环形文字识别。该文章提供了详细的步骤和代码示例,包括图像预处理、文字转换到水平方向、OCR识别等。你可以参考该文章来了解如何在C#中使用OpenCvSharp进行环形文字识别。引用\[3\]中的代码片段展示了使用OpenCvSharp进行缺陷检测的一部分代码,包括图像灰度化、模糊处理、差分图像计算、阈值化、轮廓查找和标注等。你可以根据自己的需求和具体情况,结合这些代码来实现缺陷检测。 #### 引用[.reference_title] - *1* *2* *3* [Halcon实例转OpenCvSharp(C# OpenCV)实现--瓶口缺陷检测(附源码)](https://blog.csdn.net/stq054188/article/details/125623076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值