OpenCV 4.7在VS2019 vc16中调用Arcuo Marker的问题求助
在Visual Studio 2019 VC16 + OpenCV 4.7中使用ArUco标记的解决方案
一、OpenCV 4.x中ArUco的正确引用方式
OpenCV 4.x版本后,ArUco模块的头文件从根目录移到了objdetect子文件夹下,原有的#include <aruco.hpp>需要修改为:
#include <opencv2/objdetect/aruco.hpp>
调用API时,需要指定cv::aruco命名空间,或者在代码开头添加:
using namespace cv::aruco;
二、找不到aruco.hpp的核心原因
不管是新/旧版本,找不到该头文件几乎都是因为ArUco属于OpenCV的contrib扩展模块,默认安装不会包含:
- 安装OpenCV时未勾选
opencv_contrib:不管是用官方预编译安装包还是源码编译,都需要手动选择包含contrib模块,否则不会生成aruco相关的头文件和库。 - 使用了精简版预编译包:第三方打包的OpenCV可能剔除了contrib模块,建议直接下载官方完整包或自行编译。
- VS项目路径配置错误:即使安装了contrib,未将contrib的include目录添加到项目的「附加包含目录」中,编译器也无法找到头文件。
三、生成ArUco标记的示例代码
以下是适配OpenCV 4.7的标记生成代码,可直接在VS2019中运行:
#include <opencv2/opencv.hpp> #include <opencv2/objdetect/aruco.hpp> int main() { // 选择预定义字典,这里用4x4尺寸、50个标记的字典 cv::Ptr<cv::aruco::Dictionary> dict = cv::aruco::getPredefinedDictionary(cv::aruco::DICT_4X4_50); // 生成id为0、尺寸200x200的标记,最后一个参数是边框厚度 cv::Mat markerImg; cv::aruco::generateImageMarker(dict, 0, 200, markerImg, 1); // 保存标记到本地并显示 cv::imwrite("aruco_marker_0.png", markerImg); cv::imshow("Generated ArUco Marker", markerImg); cv::waitKey(0); return 0; }
四、VS项目配置要点
- 「附加包含目录」:添加OpenCV主include目录及contrib的include目录(如
C:\opencv\build\include、C:\opencv_contrib\modules\aruco\include) - 「附加库目录」:添加对应VC16的lib目录(如
C:\opencv\build\x64\vc16\lib) - 「附加依赖项」:Debug模式添加
opencv_world470d.lib+opencv_aruco470d.lib;Release模式添加opencv_world470.lib+opencv_aruco470.lib(如果是模块化的OpenCV包,需单独添加aruco库)
内容的提问来源于stack exchange,提问作者user20980680
相关产品推荐
相关产品推荐

