基于梯度特征点(LINE-MOD)和边缘轮廓(Chamfer Matching)的模板匹配库。
| 方法 | 文件 | 原理 |
|---|---|---|
| 梯度特征点 | line2Dup.h/cpp |
LINE-MOD / 梯度响应图,适合弱纹理物体 |
| 边缘轮廓 | contour_match.h/cpp |
Chamfer Matching + 距离变换,类似 Halcon 轮廓匹配 |
- Visual Studio 2022+ (或 2026)
- CMake 3.10+
- OpenCV 4.x(C++ SDK)
- 有 MIPP (SIMD) 可选
从 https://opencv.org/releases/ 下载 Windows 版,解压到 D:\opencv。
# 使用 VS 的 CMake 集成(推荐)
# 文件 -> 打开 -> CMake -> 选择 CMakeLists.txt
# 确保 CMakePresets.json 中 OpenCV_DIR 指向你的 opencv/build 路径
# 或命令行
cmake -B build -G "Visual Studio 18 2026" -A x64 ^
-DCMAKE_BUILD_TYPE=Release ^
-DOpenCV_DIR=D:/opencv/build/x64/vc16/lib
cmake --build build --config Release# 梯度特征点匹配 (case3 - 回形针)
build\Release\shape_based_matching_test.exe
# 轮廓匹配 (case5 - 回形针)
# 编辑 test.cpp main() 切换 case3_test 和 case5_test| 目录 | 说明 |
|---|---|
test/case0/ |
圆形缩放匹配 |
test/case1/ |
旋转匹配 (LINE-MOD) |
test/case2/ |
噪声测试 |
test/case3/ |
回形针匹配 (LINE-MOD) + 自带测试图 |
test/case5/ |
回形针匹配 (轮廓法) |
line2Dup::Detector detector(64, {4, 8});
// 训练
detector.addTemplate(template_img, "my_class", mask);
detector.writeClasses("templates_%s.yaml");
// 匹配
detector.readClasses({"my_class"}, "templates_%s.yaml");
auto matches = detector.match(test_img, 0.85f, {"my_class"});contour_match::ContourDetector detector;
// 训练
detector.addTemplate(template_img, "my_class", mask, 40, 120, 500);
detector.writeClasses("contour_templates_%s.yaml");
// 匹配
detector.readClasses({"my_class"}, "contour_templates_%s.yaml");
auto matches = detector.match(test_img, 0.55f, {"my_class"});相比原始 shape_based_matching:
- 适配 Windows + Visual Studio 2026 (MSVC)
- 新增轮廓匹配 (
contour_match) - 得分归一化 0-1
- 每位置最优角度去重
CMakePresets.json一键 VS 配置