opencv的模板匹配

发布时间:2026/10/21 5:59:31

opencv的模板匹配 看到有人用opencv的模板匹配其实更多的是相关系数匹配!从前讲了很多相关系数就是没去做其实就是计算复杂度太大不值得那是刚好实现了基于形状轮廓的匹配心思不在opencv上而且一直从底层写起故而只学习opencv从来很少调用opencv到目前为止从2011接触opencv算起屈指可数用过的opencv调用1人脸识别这个自己实在写不出来或许不是写不出只是一门心思在机器视觉上机器视觉都全部完成了所以不是写不出来的问题是学习舍得之道2自己的机器视觉中用到canny写了很多版本接近opencv canny所以偶尔做对比时把玩其精髓为何3就是昨天今天用的这个cvtemplateMatch即就是ncc相关系数匹配opencv像一个老朋友陪伴15年了虽然opencv版本已经足够好足够多我还是用这个十几兆的opencv1.0好回归正题匹配关键在速度和稳定性以及精确度这是工业机器视觉的硬指标我们的兴趣在于最初的理想先使用笨方法不拐弯的直觉实现然后一步一步达成上面的三个硬指标好我们先达成第一虽然我们说的是ncc但一写起代码我就惯性思维到轮廓匹配实现走了弯路实际opencv很直接简单人家是模板匹配你非要把自己的轮廓再还原成图像模板再匹配这是退步第二原图不容易旋转只旋转roi图像模板中提炼的轮廓点这个当量极其小而ncc是旋转原图像假定中心旋转roi图像模板不旋转今天想明白这个道理roi图像旋转会出现不必要的补足像素而这些补足像素不在原图中所以匹配失败是必然的好纠正了这两步这就回归了opencv模板匹配正道1我的相机是5472*3648如果在这样的图像里取模板匹配工业现场就得挂机2我们高斯平滑后每4行4列取一个像素图像变成1368*912这就是他们说的金字塔图像3最关键我们就在这个1368*912中取模板并完成匹配为什么这个可以他的原理是高斯核是构建尺度缩放空间变换的唯一线性核尺度空间 图像G(x,y,σ) 定义为原始图像 I(x,y) 与高斯核 σ 的卷积筹备和证明整理-CSDN博客好opencv代码很简单a把1368*912处理成canny图像这里截图出来的模板就是canny图像道理很简单我们用二值特征图像获取模板然后在回二值特征图像匹配b我们完成的是-45度的匹配二值特征图像很方便旋转处理注意2436844这个绿框的起始点我们用来验证匹配结果610211你乘以4等于2440844他返回最大值以上是0度匹配我们看看1度2度3度结果最大值以及对应的坐标这幅图像静止还没动可以知道旋转45度只有0度最好因为opencv给出最大值为最佳匹配结果显然图像动一动比如10度那么再做一次0-45度旋转可以预见10最好!这样我们就简单粗暴的实现了opencv的ncc相关系数匹配opencv 相关系数匹配源代码如下IplImage* pTest8bytecvCreateImage(cvSize(localww1per4,localhh1per4 ),8,1);//使用了8位灰度图像cvSetData(pTest8byte,temp_buffer256192,localww1per4);//测试成功ok201911101905IplImage* cannyimgcvCreateImage(cvSize(pTest8byte-width,pTest8byte-height),8,1);cvCanny(pTest8byte,cannyimg,50,150,3);//cvSaveImage(c:\\opencvcannyimg202407251047.bmp,cannyimg);memcpy(globgaospydoutimgN精细for90,cannyimg-imageDataOrigin,localww1per4*localhh1per4);//canny图像也是255及0二值图像吗// //范例opencv// //读取图像和模板// IplImage* img cvLoadImage(input.jpg, CV_LOAD_IMAGE_GRAYSCALE);//IplImage* templ cvLoadImage(template.jpg, CV_LOAD_IMAGE_GRAYSCALE);IplImage* templ;IplImage* result;//for(int cv0;cv91;cv)//先完成一个0度匹配试一试opencv的函数// {//IplImage*templcvCreateImage(cvSize(globroiww, globroihh ),8,1);//使用了8位灰度图像,模板图像cvSetData(templ, globroiImg,globroiww);////使用 matchTemplate 进行匹配listCvPoint lp ;listdouble lpValue ;for(int m_baoguang0;m_baoguang45;m_baoguang){int 输出w0;int 输出h0;byte * 输出图像;double 弧度m_baoguang*3.1415926/180;//旋转0-45度//请确认是角度弧度//弧度RotateNormal((BYTE *)cannyimg-imageDataOrigin,输出图像, localww1per4, localhh1per4,//1368*912图像输出w,输出h,弧度);//IplImage*result cvCreateImage(cvSize(输出w - templ-width 1, 输出h - templ-height 1), IPL_DEPTH_32F, 1);IplImage* pTest8byteMcvCreateImage(cvSize(输出w,输出h ),8,1);//使用了8位灰度图像cvSetData(pTest8byteM,输出图像,输出w);//测试成功ok201911101905//ncc匹配//这里的cannyimg要旋转并记录每个角度的成绩和位置cvMatchTemplate(pTest8byteM, templ, result,CV_TM_CCOEFF);cvReleaseImage(pTest8byteM);CvPoint minLoc, maxLoc;double minVal, maxVal;cvMinMaxLoc(result, minVal, maxVal, minLoc, maxLoc, 0);lpValue.push_back(maxVal);lp.push_back(maxLoc);}for(int i315;i359;i){}opencv模板学习代码如下IplImage* pTest8bytecvCreateImage(cvSize(localww1per4,localhh1per4 ),8,1);//使用了8位灰度图像cvSetData(pTest8byte,temp_buffer256192,localww1per4);//测试成功ok201911101905IplImage* cannyimgcvCreateImage(cvSize(pTest8byte-width,pTest8byte-height),8,1);cvCanny(pTest8byte,cannyimg,50,150,3);//cvSaveImage(c:\\opencvcannyimg202407251047.bmp,cannyimg);memcpy(globgaospydoutimgN精细for45,cannyimg-imageDataOrigin,localww1per4*localhh1per4);//cannyimg-imageData好于imageDataOrigin,要做测试是否要改byte* roiImage new byte[roiww * roihh];this-globroiImg new byte[roiww * roihh];globroiwwroiww;globroihhroihh;int te roitop * localww1per4 roileft;for (int i 0; i roihh; i)for (int j 0; j roiww; j){globroiImg[i * roiww j] roiImage[i * roiww j] globgaospydoutimgN精细for45[i * localww1per4 j te ];}图像旋转源码机器视觉入门之路十六完成图像旋转c_机器视觉中怎么把左下角的图一到右上角-CSDN博客
延伸阅读

更多相关文章

2026/10/19 6:44:54

基于Figma API与MCP思想的设计稿数据提取与结构化实战

在实际前端开发流程中,设计稿与代码实现之间的鸿沟一直是影响开发效率的关键瓶颈。设计师在 Figma 中完成精美的界面,而开发者则需要手动测量间距、提取颜色、复制文案,这个过程不仅繁琐,还容易出错。随着 AI 辅助开发工具的兴起&…

2026/10/18 13:02:21

从传统客户端到AI智能体平台:DeepSeek Harness迁移实战指南

最近在技术圈看到不少关于“客户端迁移”的讨论,其中池建强老师停掉维护两年的客户端,全面转向 DeepSeek Harness 的案例,引起了我的兴趣。这背后反映的,远不止一个技术栈的切换,而是开发范式、团队协作和工具链效率的…

2026/10/21 9:23:11

燃料电池堆冷却仿真:COMSOL热管理建模全流程解析

第一次拿到燃料电池堆的温度场云图时,我的第一反应是:“这图是不是画反了?”冷却液入口侧温度最低不假,但沿着流道走了不到一半,温度直接冲到了80℃以上,端板边缘还冒出一片红色。后来我用COMSOL做燃料电池…

2026/10/21 9:23:11

西瓜书第六章SVM学习路径:从对偶推导到SMO手写实现

1. 这条学习路径为什么值得走一遍先坦白一个事实:西瓜书第六章我前前后后翻过三遍,前两遍都卡在同一个地方——拉格朗日对偶性那一页。KKT条件、对偶问题、SMO算法,每个字都认识,连起来不知道在说什么。后来参加了一期吃瓜教程组队…

2026/10/21 9:23:11

日志转语言:大模型推荐系统中的最优表述与工程实践

试想一下,线上系统每天刷新几千万条用户行为日志,点击、收藏、停留时长、购买,全在里面堆着。传统做法是清洗后算特征,喂给排序模型。可到了大语言模型时代,这些结构化的、散落的数值字段反而成了障碍——模型读不懂“…

2026/10/21 9:23:11

PySide2嵌入matplotlib实战:静态图与交互式画布方案

做桌面端工具软件的朋友,多多少少都会撞上同一个尴尬:界面用PySide2搭得漂漂亮亮,按钮、表格、输入框、布局样样顺手,可一到数据可视化环节就卡住了。Qt自带的绘图表组件不是功能偏弱就是样式老旧,统计图形、散点图、热…

2026/10/21 9:18:10

Ceph RBD删除后空间未释放?trash清理与对象回收实战指南

处理这种问题,我的第一反应是:先别急着扩容,也别怀疑删除操作失败。ceph df显示的空间没变化,十有八九是对象没被真正清掉,或者删除流程还没走完。标题里提到的“删除rbd的数据”,大概率是通过rbd rm或rbd …

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/21 0:00:35

交通流仿真实战:IDM跟驰与MOBIL换道模型参数调优与避坑指南

简介:这份资源是面向交通工程学习者与Python开发者的微观交通流仿真项目,核心实现智能驾驶模型(IDM)下的车辆跟驰与换道行为,可用于理解速度、密度与流量之间的动态关系,适合具备Python基础、希望深入交通模…

2026/10/21 0:00:35

揭穿智能体表面顺从:用追踪代码重建任务执行确定性

1. 表面顺从不是智能体的“礼貌”,而是任务执行链路上的隐性断点最近在调试一个跨平台长周期任务调度系统时,我反复遇到一种令人困惑的现象:智能体在用户指令发出后,几乎秒级响应“已收到”“正在处理”“请稍候”,UI上…

2026/10/21 0:00:35

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑