QT + Opencv 实现灰度模板匹配

[复制链接]
发表于 2025-11-10 22:29:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
QT + Opencv 实现灰度模板匹配

实现思绪

1.模板创建代码思绪

1 初始化和准备:

使用 cv::buildPyramid 函数构建图像金字塔。图像金字塔是一种多分辨率体现,每个层级的图像分辨率徐徐低沉。
调解 m_TemplData 的巨细以匹配图像金字塔的层级数。
盘算每个层级的统计数据:
2遍历图像金字塔的每个层级。

盘算当前层级图像的倒数面积 invArea,用于后续的归一化处置惩罚。
使用 cv::meanStdDev 函数盘算当前层级图像的均值 templMean 和标准差 templSdv。
盘算模板图像的归一化范数 templNorm,这是模板图像的归一化标准差的平方和。
查抄 templNorm 是否小于 DBL_EPSILON,假如是,体现当前层级图像的方差靠近于零,将其标志为 vecResultEqual1 为 true。
盘算 templSum2,这是 templNorm 加上均值的平方和,然后除以 invArea。
盘算 templNorm 的平方根,并归一化。
将盘算得到的 invArea、templMean 和 templNorm 存储到 m_TemplData 中对应的位置。
模板练习代码:
  1. //训练模板
  2. void frmTemplateMatch::LearnPattern(const cv::Mat model, const int num_levels,s_TemplData &m_TemplData)
  3. {
  4.    
  5.    
  6.     qDebug()<<"train mode...";
  7.     m_TemplData.clear();
  8.     cv::buildPyramid(model, m_TemplData.vecPyramid, num_levels);
  9.     int iSize = m_TemplData.vecPyramid.size();
  10.     m_TemplData.resize(iSize);
  11.     for (int i = 0; i < iSize; i++)
  12.     {
  13.    
  14.    
  15.         double invArea = 1. / ((double)m_TemplData.vecPyramid[i].rows * m_TemplData.vecPyramid[i].cols);
  16.         cv::Scalar templMean, templSdv;
  17.         double templNorm = 0, templSum2 = 0;
  18.         cv::meanStdDev(m_TemplData.vecPyramid[i], templMean, templSdv);
  19.         templNorm = templSdv[0] * templSdv[0] + templSdv[1] * templSdv[1] + templSdv[2] * templSdv[2] + templSdv
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表