QT + Opencv 实现灰度模板匹配

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 中对应的位置。

模板训练代码:

//训练模板
void frmTemplateMatch::LearnPattern(const cv::Mat model, const int num_levels,s_TemplData &m_TemplData)
{
   
   
    qDebug()<<"train mode...";
    m_TemplData.clear();
    cv::buildPyramid(model, m_TemplData.vecPyramid, num_levels);
    int iSize = m_TemplData.vecPyramid.size();
    m_TemplData.resize(iSize);
    for (int i = 0; i < iSize; i++)
    {
   
   
        double invArea = 1. / ((double)m_TemplData.vecPyramid[i].rows * m_TemplData.vecPyramid[i].cols);
        cv::Scalar templMean, templSdv;
        double templNorm = 0, templSum2 = 0;
        cv::meanStdDev(m_TemplData.vecPyramid[i], templMean, templSdv);
        templNorm = templSdv[0] * templSdv[0] + templSdv[1] * templSdv[1] + templSdv[2] * templSdv[2] + templSdv
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值