我的Qt作品(12)使用Qt+OpenCV实现一个带旋转角度的形状匹配演示软件

使用Qt+OpenCV自己写了一个带旋转角度的形状匹配算子以及它的演示软件。算子的原理是基于轮廓边缘的Shape匹配。

一、Shape匹配

1、形状匹配的原理可以参考印度小哥的开源项目,Edge Based Template Matching
https://www.codeproject.com/Articles/99457/Edge-Based-Template-Matching

但是Edge Based Template Matching项目本身是不支持旋转角度和金字塔分级的,所以需要自己实现这些功能。

2、推荐阅读书籍《机器视觉算法与应用(第2版)》,halcon作者编写,3.11章节,模板匹配

二、本篇的演示软件主要功能:(未使用商业图像处理库,而是纯粹Qt+OpenCV

1、Shape匹配

2、金字塔

3、最大重叠率,贪婪度

4、旋转角度

5、匹配分数

6、不支持缩放

7、模板文件读写

8、ROI框选功能,人机交互

三、部分头文件:

创建模板,对照学习halcon的算子create_shape_model
查找物体,对照学习halcon的算子find_shape_model

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

public:
    void createShapeModel(const cv::Mat &imageModel, int numLevels, double angleStart, double angleExtent, double angleStep,
                          double minContrast, double maxContrast, CShapeModelID &modelID);
    void findShapeModel(const cv::Mat &imageSearch, const CShapeModelID &modelID, double angleStart, double angleExtent, double minScore, int numMatches, double maxOverlap, int numLevels,
                        double greediness, std::vector<int> &vtRow, std::vector<int> &vtColumn, std::vector<double> &vtAngle, std::vector<double> &vtScore);

四、演示软件截图:(未使用商业图像处理库,而是纯粹Qt+OpenCV

---

引申阅读

https://github.com/meiqua/shape_based_matching

https://github.com/Layjins/A-MNS_TemplateMatching

https://github.com/datawhalechina/team-learning-cv

猜你喜欢

转载自blog.csdn.net/libaineu2004/article/details/123192926