OpenCvSharp模板匹配实战:Cv2.MatchTemplate方法详解
创作时间:
作者:
@小白创作中心
OpenCvSharp模板匹配实战:Cv2.MatchTemplate方法详解
引用
CSDN
1.
https://blog.csdn.net/FL1768317420/article/details/137365239
OpenCvSharp是OpenCV的C#封装,提供了丰富的计算机视觉功能。其中,模板匹配是一种常用的图像处理技术,用于在一幅图像中查找与给定模板最相似的区域。本文将详细介绍OpenCvSharp中的模板匹配方法Cv2.MatchTemplate
,并给出具体的使用示例。
Cv2.MatchTemplate 方法详解
Cv2.MatchTemplate
方法通过在输入图像中滑动模板图像并计算每个位置的匹配度来查找模板的位置。匹配度通常使用平方差或相关性等指标来度量,具体取决于所选择的匹配方法。
方法签名
void Cv2.MatchTemplate(InputArray image,
InputArray templ,
OutputArray result,
TemplateMatchModes method,
InputArray mask = null)
image
:输入图像,你希望在其中查找模板的图像。通常,这是一幅较大的图像。templ
:要查找的模板图像,你希望在输入图像中匹配的部分。result
:输出结果图像,它将包含匹配度信息。这是一个单通道浮点型图像。method
:匹配方法,一个枚举值,用于选择不同的匹配算法。常用的选项有:TemplateMatchModes.SqDiff
:平方差匹配。返回最小平方差的位置。TemplateMatchModes.CCoeffNormed
:相关性匹配。返回最大相关性的位置。mask
(可选):用于指定模板匹配的掩码图像。如果不需要,可以设置为null
。
获取匹配位置
为了从匹配结果中获取最佳匹配的位置,可以使用Cv2.MinMaxLoc
方法:
public static void MinMaxLoc(Mat src,
out double minVal,
out double maxVal,
out Point minLoc,
out Point maxLoc,
Mat mask = null);
src
:输入图像,通常是一个单通道图像(灰度图像)。minVal
:输出参数,用于存储图像中的最小值。maxVal
:输出参数,用于存储图像中的最大值。minLoc
:输出参数,用于存储最小值的位置。maxLoc
:输出参数,用于存储最大值的位置。mask
(可选参数):用于指定感兴趣区域的掩码图像。如果不需要使用掩码,可以将其设置为null
。
实际应用示例
下面是一个完整的C#代码示例,展示了如何使用Cv2.MatchTemplate
方法在图像中查找模板:
using OpenCvSharp;
using System;
namespace 模板匹配
{
class Program
{
static void Main(string[] args)
{
// 定义输入图像路径和模板图像路径
string srcImgPath = "C:/Users/CGW/Desktop/digits/0.1.jpg";
string tempImgPath = "C:/Users/CGW/Desktop/digits/0.4.jpg";
// 读取输入图像和模板图像
Mat srcImage = Cv2.ImRead(srcImgPath, ImreadModes.AnyColor);
Mat tempImage = Cv2.ImRead(tempImgPath, ImreadModes.AnyColor);
// 创建用于存储模板和匹配结果的图像
Mat result = new Mat();
// 使用模板匹配方法进行匹配,这里使用归一化相关系数匹配法
Cv2.MatchTemplate(srcImage, tempImage, result, TemplateMatchModes.CCoeffNormed);
// 获取匹配结果中的最小值、最大值以及对应的位置
double minVal, maxVal;
OpenCvSharp.Point minLoc, maxLoc;
Cv2.MinMaxLoc(result, out minVal, out maxVal, out minLoc, out maxLoc);
// 获取最佳匹配的位置
OpenCvSharp.Point matchLoc = maxLoc;
// 在输入图像上用绿色矩形框标记匹配的位置
Cv2.Rectangle(srcImage, matchLoc, new OpenCvSharp.Point(matchLoc.X + tempImage.Cols, matchLoc.Y + tempImage.Rows), Scalar.Green, 2);
// 显示模板和匹配结果的图像
Cv2.ImShow("模板", tempImage);
Cv2.ImShow("Matched Result", srcImage);
Cv2.WaitKey(0);
// 释放图像对象,关闭显示窗口
srcImage.Release();
tempImage.Release();
result.Release();
Cv2.DestroyAllWindows();
Cv2.DestroyAllWindows();
}
}
}
结果显示
通过上述代码,可以在输入图像中准确地定位模板图像的位置,并用绿色矩形框标记出来。这种方法在图像处理和计算机视觉领域有着广泛的应用,例如目标检测、特征匹配等场景。
热门推荐
怎样让公司安全管理制度更完善?
家长必读:疫苗接种禁忌误区,这些情况到底能不能接种疫苗?
宿迁市第一人民医院成功抢救一例急性重症脑梗死患者
如何根据不同行业选择合适的股票价值评估方法?
时间紧迫,策略为先:高考前一个月提分计划
3000多年前河南地区发生的一次车祸,成为最早有记录的交通事故|安阳殷墟|
古今握手 千年运河正在迎来新生
走进黔南都匀市,解锁多彩民族文化,体验异域风情!
准妈妈孕期健康小贴士!请查收
梦见主持正义的人:周公解梦中的深层寓意
上海地铁手机NFC使用方法
若每天戴耳机1小时?将有这些症状,得注意了
雨水时节丨春捂涵阳防疫病
买人身意外险受益人可以是朋友吗
油封密封圈的技术设计与材料选择
光绪的历史贡献多大?很多人想不到,史学家:比雍正乾隆贡献大
AI取代不了人,但不用AI的人将会被用AI的人取代
K线实战分析系列之三:吞没形态
厨房贴纸防油贴怎么去除
清朝灭亡后,满族姓氏都改成啥,那英为何说自己可能和叶赫那拉氏没关系?
怀孕时小腹酸痛的治疗方法有哪些?
电商的职业目标,电商行业中,如何设定并实现职业目标?
李清照的丈夫:赵明诚的去世与“中署而死”的说法
Excel中如何筛选前20%的数据
全民营养周:科学补充营养夯实免疫系统功能
笔记本电源适配器发热:原因、影响及应对措施
如何协商解决劳动争议?劳动争议案审结后能否提名誉权索赔?
适用于孩子每个阶段的感统训练游戏,建议家长收藏哦!
速看!春节期间,『胃食管反流病』的自我管理秘籍
周报也能成亮点?大厂实习生必学的周报撰写技巧!