使用 aruco 和 opencv4 的未解析符号

Unresolved symbol using aruco with opencv4

本文关键字:符号 aruco opencv4 使用      更新时间:2023-10-16

我正在尝试使用opencv的相机姿势。所以我正在遵循这一系列教程,它导致我包括这些:

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/aruco.hpp>
#include <opencv2/calib3d.hpp>

一切都很好,但阿鲁科。首先,它不在我的 opencv(版本 4.3(包中,所以我不得不去寻找它并将其放在我的 opencv 包含目录中(我添加了aruco.hpp以及包含charuco.hppdictionary.hpp的 aruco 文件夹(。我搜索了我在opencv lib目录(x64(中添加的opencv_aruco310d.lib文件。

我使用本教程安装了 opencv

但是当我尝试运行我的代码时,它给了我这个错误:

错误LNK2019外部符号未解析"无效__cdecl cv::aruco::d rawMarker(struct cv::P tr const &,int,int,class cv::d ebug_build_guard::_OutputArray const &,int(" (?drawMarker@aruco@cv@@YAXAEBU?$Ptr@VDictionary@aruco@cv@@@2@HHAEBV_OutputArray@debug_build_guard@2@H@Z( 在函数"void __cdecl createArucoMarkers(void("中引用 (?createArucoMarkers@@YAXXZ( 控制台应用程序1

似乎与这行代码有关:

aruco::drawMarker(markerDictionary, i, 500, outputMarker, 1);

我知道我在这里有一个版本问题,我想我在某处看到 aruco 在 opencv3 之后不受支持,所以我尝试使用 opencv3.4,但它仍然不起作用。

如何解决我的问题?提前谢谢你。

发生这种情况是因为您下载的 aruco 模块版本与您当前版本的 OpenCV 库不兼容。解决这个问题的最佳方法是编译 OpenCV,指定要添加opencv_contrib库。为了避免出现问题,让我们对OpenCV contrib和OpenCV使用相同的版本:例如4.3.0。

首先,下载OpenCV 4.3.0源代码。

其次,下载OpenCV Contrib 4.3.0源代码。

如果您已将它们下载为 ZIP,请将它们解压缩到两个不同的文件夹中。

然后您将需要CMake,下载并为Windows配置它(也许此链接可能会有所帮助(。

要使用 OpenCV contrib 编译 OpenCV,您需要将 CMake 与以下命令一起使用:

cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>

如此处所述。在 CMake 的 GUI 版本中,您需要指定参数OPENCV_EXTRA_MODULES_PATHOpenCV 贡献源代码中包含的"模块"文件夹的路径。

之后,你只需要生成代码(例如,使用 CMake 将 Visual Studio 设置为编译器,你将拥有一个可用于生成代码的 sln 解决方案(。

编辑:您可能还需要设置环境变量,您可以按照此处所说的进行操作。