千家信息网

opencv C++模板匹配的实现方法

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"opencv C++模板匹配的实现方法",在日常操作中,相信很多人在opencv C++模板匹配的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
千家信息网最后更新 2026年11月04日opencv C++模板匹配的实现方法

这篇文章主要介绍"opencv C++模板匹配的实现方法",在日常操作中,相信很多人在opencv C++模板匹配的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"opencv C++模板匹配的实现方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一 简单实现

#include #includeusing namespace cv;using namespace std;int main(){        Mat img = imread("52.jpg");        Mat templ = imread("templ.jpg");        Mat result;        matchTemplate(img,templ,result,TM_CCOEFF_NORMED);//原图,模板,匹配方法                double maxVal, minVal;        Point maxLoc, minLoc;        //寻找最大值,最小值        minMaxLoc(result, &minVal, &maxVal, &minLoc, &maxLoc);        //绘制矩形,矩形的左上角是最大值的位置,右下角是在最大值上加上模板的行宽和和列高        rectangle(img,Point(maxLoc.x,maxLoc.y),Point(maxLoc.x+templ.cols,maxLoc.y+templ.rows),Scalar(0,0,255),2);//颜色红色,粗度2        imshow("原图", img);        imshow("模板",templ);        imshow("result",result);        waitKey(0);        return 0;}

结果如下,分别是模板图,原图(找到了与模板匹配的部分,并矩形框标记,结果图,暂时觉得有点问题的 )

二 函数及原理讲解

1 matchTemplate()参数详解

matchTemplate( InputArray image, InputArray templ,OutputArray result, int method );

image:待匹配的源图像
templ:模板图像
result:保存结果的矩阵,我们可以通过minMaxLoc() 确定结果矩阵的最大值和最小值的位置.

method :模板匹配的算法有以下六种:  enum { TM_SQDIFF=0, TM_SQDIFF_NORMED=1, TM_CCORR=2, TM_CCORR_NORMED=3, TM_CCOEFF=4, TM_CCOEFF_NORMED=5 };

TM_SQDIFF,TM_SQDIFF_NORMED匹配数值越低表示匹配效果越好,其它四种反之。
TM_SQDIFF_NORMED,TM_CCORR_NORMED,TM_CCOEFF_NORMED是标准化的匹配,得到的最大值,最小值范围在0~1之间,其它则需要自己对结果矩阵归一化。
不同的方法会得到差异很大的结果,可以通过测试选择最合适的方法。

cv::TM_SQDIFF 判断 minVal 越小,效果越好
计算模板与目标图像的方差,由于是像素值差值的平方的和,所以值越小匹配程度越高;

cv::TM_SQDIFF_NORMED 判断 minVal 越接近0,效果越好
范化的cv::TM_SQDIFF,取值为0-1之间,完美匹配返回值为0;

cv::TM_CCORR 判断 maxVal 越大,效果越好
使用dot product计算匹配度,越高匹配度就好;

cv::TM_CCORR_NORMED 判断 maxVal 越接近1,效果越好
范化的cv::TM_CCORR,0-1之间,我用的这个;

cv::TM_CCOEFF 判断 maxVal 越大,效果越好
采用模板与目标图像像素与各自图像的平均值计算dot product,正值越大匹配度越高,负值越大图像的区别越大,但如果图像没有明显的特征(即图像中的像素值与平均值接近)则返回值越接近0;

cv::TM_CCOEFF_NORMED 判断 maxVal 越接近1,效果越好
范化的cv::TM_CCOEFF,-1 ~ 1之间。

2 minMaxLoc()函数

查找全局最小和最大稀疏数组元素并返回其值及其位置

void minMaxLoc(const SparseMat& a, double* minVal,double* maxVal, int* minIdx=0, int* maxIdx=0);

a: 匹配结果矩阵
&minVal 和 &maxVal: 在矩阵 result 中存储的最小值和最大值
&minLoc 和 &maxLoc: 在结果矩阵中最小值和最大值的坐标.

到此,关于"opencv C++模板匹配的实现方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

模板 方法 最大 结果 效果 最大值 越好 最小 图像 矩阵 C++ 之间 学习 位置 像素 原图 矩形 函数 可以通过 平均值 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海卓越科技互联网 涨乐互联网科技 网络科技有限互联网 互联网金融公司科技 奇酷互联网科技公司 奇酷互联网络科技 融贸通互联网科技 郑州华宇互联网科技 互联网科技股午盘股票涨跌 济南和联互联网科技有限公司 中国科技互联网公司收入 岳阳华臻互联网科技有限公司 互联网科技革命什么开始 青海科技产业互联网发展 工业互联网等科技实现智能化赋能 本届互联网大会上的黑科技 易企秀互联网科技是做什么的 上海同邻互联网科技有限公司规模 中国新注册互联网科技 上海互联网科技园景观 互联网科技名片 百单网互联网科技有限公司怎么样 上海挚品互联网科技 世界互联网领先科技成果 广州凡科互联网科技 天速互联网络科技有限公司 浙江互联网科技研学营 中国互联网公司排名锤子科技 互联网企业科技类企业如何做账 上海互联网科技园景观
0