0
点赞
收藏
分享

微信扫一扫

我的Qt作品(11)使用Qt+OpenCV实现一个带旋转角度的NCC灰度模板匹配演示软件

书呆鱼 2022-02-25 阅读 78

使用Qt+OpenCV自己写了一个带旋转角度的NCC灰度模板匹配算子。算子的原理是基于NCC灰度匹配。

在opencv代码中,matchTemplate函数保存在文件imgproc文件夹下的templmatch.cpp中,NCC算子的计算方式是cv::TM_CCOEFF_NORMED
https://github.com/opencv/opencv/blob/4.5.5/modules/imgproc/src/templmatch.cpp

部分头文件

#ifndef CNCCMATCH_H
#define CNCCMATCH_H

#include "nccmodelid.h"
#include "result.h"

class VISIONCORE_EXPORT CNccMatch
{
public:
    CNccMatch();
    virtual ~CNccMatch();

public:
    void createNccModel(const cv::Mat &imageModel, int numLevels, double angleStart, double angleExtent, double angleStep, CNCCModelID &modelID);
    void findNccModel(const cv::Mat &imageSearch, const CNCCModelID &modelID, double angleStart, double angleExtent, double minScore, int numMatches, double maxOverlap, int numLevels,
                      std::vector<int> &vtRow, std::vector<int> &vtColumn, std::vector<double> &vtAngle, std::vector<double> &vtScore);

private:
    void multipleMaxLoc(const cv::Mat &image, double minScore, int numMatches, std::vector<cv::Point> &vtLocations, std::vector<double> &vtMaxima);
    void imageRotate(cv::Mat &imageSrc, double angle, cv::Mat &imageDst, cv::Mat &mask);
    void clusterAnalyze(const std::vector<SMatchResult> &vtSrc, std::vector<SMatchResult> &vtDst, double disThreshold = 10);
    void nmsMatchesRotatedRect(const std::vector<SMatchResult> &vtSrc, const cv::Size &modelsize, std::vector<SMatchResult> &vtDst, double maxOverlap);
    void nmsMatchesRect(const std::vector<SMatchResult> &vtSrc, std::vector<SMatchResult> &vtDst, double maxOverlap);
};

#endif // CNCCMATCH_H

演示软件截图:(未使用商业图像处理库,纯Qt+OpenCV)

---

参考文献

【工程应用一】 多目标多角度的快速模板匹配算法(基于NCC,效果无限接近Halcon中........) - Imageshop - 博客园

举报

相关推荐

0 条评论