使用带有 opencv4 的 aruco 的未解析符号

Unresolved symbol using aruco with opencv4

我正在尝试使用来自 opencv 的相机姿势。所以我正在关注 this series 的教程,这导致我包括这些:

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

除 aruco 外,一切正常。首先它不在我的 opencv (ver 4.3) 包中所以我不得不去寻找它并将它放在我的 opencv 包含目录中(我添加了 aruco.hpp 作为以及包含 charuco.hppdictionary.hpp 的 aruco 文件夹)。我搜索了我在 opencv lib 目录 (x64).

中添加的 opencv_aruco310d.lib 文件

我使用this tutorial

安装了opencv

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

Error LNK2019 external symbol unresolved "void __cdecl cv::aruco::drawMarker(struct cv::Ptr const &,int,int,class cv::debug_build_guard::_OutputArray const &,int)" (?drawMarker@aruco@cv@@YAXAEBU?$Ptr@VDictionary@aruco@cv@@@2@HHAEBV_OutputArray@debug_build_guard@2@H@Z) referenced in the function "void __cdecl createArucoMarkers(void)" (?createArucoMarkers@@YAXXZ) ConsoleApplication1

好像跟这行代码有关:

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

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

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

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

首先,下载OpenCV 4.3.0 source code.

二、下载OpenCV Contrib 4.3.0 source code.

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

那么您将需要 CMake,为 Windows 下载并配置它(也许 this link 会有所帮助)。

要使用 OpenCV contrib 编译 OpenCV,您需要通过以下命令使用 CMake:

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

如指定的那样here。在 CMake 的 GUI 版本中,您需要使用 OpenCV contrib 源代码中包含的 'modules' 文件夹的路径指定参数 OPENCV_EXTRA_MODULES_PATH

之后,您只需要构建代码(例如,将 Visual Studio 设置为带有 CMake 的编译器,您将拥有一个可用于构建代码的 sln 解决方案)。

编辑:您可能还需要设置环境变量,您可以按照here.

的说明进行操作