当前位置:   article > 正文

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

c# opencv 定位

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

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

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

  1. // 1、读取图像
  2. Mat image = Cv2.ImRead("01.jpg", ImreadModes.Color);
  3. Mat template = Cv2.ImRead("0102.jpg", ImreadModes.Color);
  4. // 2、 使用cv2.matchTemplate()函数进行模板匹配
  5. Mat resultImage = new Mat();
  6. Cv2.MatchTemplate(image, template, resultImage, TemplateMatchModes.CCoeffNormed);
  7. //3、 获取匹配结果的最大值和最小值的位置
  8. double minVal, maxVal;
  9. Point minLoc, maxLoc;
  10. Cv2.MinMaxLoc(resultImage, out minVal, out maxVal, out minLoc, out maxLoc);
  11. //4、绘制矩形框标记匹配结果
  12. Rect rect = new Rect(maxLoc.X, maxLoc.Y, template.Width, template.Height);
  13. Cv2.Rectangle(image, rect, Scalar.Red, 2);
  14. //5、显示匹配结果
  15. Cv2.ImShow("Result", image);
  16. Cv2.WaitKey(0);

 看结果

确实匹配到一个爱心,那么爱心只能一个,不甘心再来;

  1. // 1、读取图像
  2. Mat image = Cv2.ImRead("01.jpg", ImreadModes.Color);
  3. Mat template = Cv2.ImRead("0103.jpg", ImreadModes.Color);
  4. // 2、 使用cv2.matchTemplate()函数进行模板匹配
  5. Mat resultImage = new Mat();
  6. Cv2.MatchTemplate(image, template, resultImage, TemplateMatchModes.CCoeffNormed);
  7. //3、 获取匹配结果的最大值和最小值的位置
  8. // 设置匹配阈值
  9. double threshold = 0.81;
  10. // 获取匹配结果的最小值和最大值的位置
  11. while (true)
  12. {
  13. double minVal, maxVal;
  14. Point minLoc, maxLoc;
  15. Cv2.MinMaxLoc(resultImage, out minVal, out maxVal, out minLoc, out maxLoc);
  16. // 如果最大值小于阈值,则退出循环
  17. if (maxVal < threshold)
  18. break;
  19. // 在源图像上绘制矩形框
  20. //4、绘制矩形框标记匹配结果
  21. Rect rect = new Rect(maxLoc.X, maxLoc.Y, template.Width, template.Height);
  22. Cv2.Rectangle(image, rect, Scalar.Green, 1);
  23. // 将匹配结果置为0,以便找到下一个最大值
  24. Cv2.FloodFill(resultImage, maxLoc, Scalar.Black);
  25. }
  26. //5、显示匹配结果
  27. Cv2.ImShow("Result", image);
  28. 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透视矫正参数调整器

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

闽ICP备14008679号