使用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