我正在尝试使用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(Ver4.3)包中,所以我必须去寻找它,并将它放在我的opencv include目录中(我添加了aruco.hpp
以及包含charuco.hpp
和dictionnary.hpp
的aruco文件夹)。 我搜索了添加到opencv lib目录(x64)中的opencv_aruco310d.lib
文件。
我使用本教程安装了opencv
但当我尝试运行代码时,它会给我以下错误:
错误LNK2019外部符号未解析“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)在函数“void__cdecl createArucoMarkers(void)”(?
似乎与这行代码有关:
aruco::drawMarker(markerDictionary, i, 500, outputMarker, 1);
我明白我这里有一个版本的问题,我想我在某处看到aruco在opencv3后不被支持,所以我尝试了opencv3.4,但它仍然不工作。
我该如何解决我的问题? 提前谢谢你。
这是因为您下载了一个版本的aruco模块,该模块与当前版本的OpenCV库不兼容。 解决这个问题的最佳方法是编译OpenCV,指定要添加opencv_contrib库。 为了避免出现问题,让我们对OpenCV,contrib和OpenCV使用相同的版本:例如4.3.0。
首先,下载OpenCV4.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 contrib源代码中包含的'modules'文件夹。
之后,您只需要构建代码(例如,使用CMake将Visual Studio设置为编译器,您将有一个sln解决方案,可以用于构建代码)。