使用 aruco 和 opencv4 的未解析符号
Unresolved symbol using aruco with opencv4
我正在尝试使用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.hpp
和dictionary.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_PATH
OpenCV 贡献源代码中包含的"模块"文件夹的路径。
之后,你只需要生成代码(例如,使用 CMake 将 Visual Studio 设置为编译器,你将拥有一个可用于生成代码的 sln 解决方案(。
编辑:您可能还需要设置环境变量,您可以按照此处所说的进行操作。
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 使用gcc从静态链接的文件中查找可选符号
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- VC++本机单元测试,找不到调试符号
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 检查TCHAR数组输入是否为带符号整数C++
- 用符号版本替换对函数的所有调用
- 未解析的外部符号_MsiLocateComponentW@12.
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 使用 aruco 和 opencv4 的未解析符号