From e6751c98fc5fc573a5136673c020d4a2de839267 Mon Sep 17 00:00:00 2001 From: wangchongwu <759291707@qq.com> Date: Wed, 14 May 2025 21:14:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BA=AF=E5=9B=BE=E5=83=8F=E7=89=B9=E5=BE=81?= =?UTF-8?q?=E6=8B=BC=E6=8E=A5=20=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3rdParty/debug/lib/ceres-debug.lib | Bin 0 -> 137044 bytes 3rdParty/debug/lib/gflags_debug.lib | Bin 0 -> 30516 bytes 3rdParty/debug/lib/gflags_nothreads_debug.lib | Bin 0 -> 31346 bytes 3rdParty/debug/lib/glogd.lib | Bin 0 -> 55222 bytes 3rdParty/debug/lib/opencv_world455d.lib | Bin 0 -> 3421288 bytes 3rdParty/release/lib/ceres.lib | Bin 0 -> 134998 bytes 3rdParty/release/lib/gflags.lib | Bin 0 -> 29946 bytes 3rdParty/release/lib/gflags_nothreads.lib | Bin 0 -> 30848 bytes 3rdParty/release/lib/glog.lib | Bin 0 -> 55062 bytes 3rdParty/release/lib/opencv_world455.lib | Bin 0 -> 3336712 bytes CMakeLists.txt | 3 + ProcDJ.cpp | 12 +- feaStitchTest.cpp | 181 ++++++++ main.cpp | 42 +- stitch/include/Arith_FeaStitch.h | 30 ++ stitch/src/API_FeaStitch.h | 44 ++ stitch/src/Arith_FeaMatch.cpp | 12 + stitch/src/Arith_FeaMatch.h | 3 +- stitch/src/Arith_FeaStitch.cpp | 407 ++++++++++++++++++ stitch/src/Arith_FeaStitch.h | 72 ++++ stitch/src/Arith_UnderStitch.cpp | 10 +- stitch/src/FileCache.h | 21 +- stitch/src/StitchStruct.h | 6 + stitch/src/Version.h | 2 +- 24 files changed, 820 insertions(+), 25 deletions(-) create mode 100644 3rdParty/debug/lib/ceres-debug.lib create mode 100644 3rdParty/debug/lib/gflags_debug.lib create mode 100644 3rdParty/debug/lib/gflags_nothreads_debug.lib create mode 100644 3rdParty/debug/lib/glogd.lib create mode 100644 3rdParty/debug/lib/opencv_world455d.lib create mode 100644 3rdParty/release/lib/ceres.lib create mode 100644 3rdParty/release/lib/gflags.lib create mode 100644 3rdParty/release/lib/gflags_nothreads.lib create mode 100644 3rdParty/release/lib/glog.lib create mode 100644 3rdParty/release/lib/opencv_world455.lib create mode 100644 feaStitchTest.cpp create mode 100644 stitch/include/Arith_FeaStitch.h create mode 100644 stitch/src/API_FeaStitch.h create mode 100644 stitch/src/Arith_FeaStitch.cpp create mode 100644 stitch/src/Arith_FeaStitch.h diff --git a/3rdParty/debug/lib/ceres-debug.lib b/3rdParty/debug/lib/ceres-debug.lib new file mode 100644 index 0000000000000000000000000000000000000000..4de68475ee400ebccff497b5da85248a3e8a90c7 GIT binary patch literal 137044 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