You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译k4a-calibration报错:Aruco字典受保护访问限制

k4a-calibration项目编译失败修复方案

问题描述

编译k4a-calibration项目时出现如下错误:

[ 33%] Building CXX object CMakeFiles/calib_k4a.dir/src/camera_extrinsics.cpp.o
/home/ccnam/Downloads/k4a-calibration/src/camera_extrinsics.cpp: In member function ‘bool ExtrinsicsCalibration::CalculateExtrinsics(const std::vector<FrameInfo>&, std::vector<AlignmentTransform>&)’:
/home/ccnam/Downloads/k4a-calibration/src/camera_extrinsics.cpp:213:51: error: ‘cv::Ptr<cv::aruco::Dictionary> cv::aruco::Board::dictionary’ is protected within this context
             cv::aruco::detectMarkers(gray, board->dictionary, markerCorners, markerIds, params);
                                                   ^~~~~~~~~~
In file included from /usr/local/include/opencv4/opencv2/aruco_detector.hpp:6:0,
                 from /usr/local/include/opencv4/opencv2/aruco.hpp:7,
                 from /usr/local/include/opencv4/opencv2/aruco/charuco.hpp:9,
                 from /home/ccnam/Downloads/k4a-calibration/include/camera_extrinsics.hpp:11,
                 from /home/ccnam/Downloads/k4a-calibration/src/camera_extrinsics.cpp:1:
/usr/local/include/opencv4/opencv2/aruco/board.hpp:89:29: note: declared protected here
     CV_PROP Ptr<Dictionary> dictionary;
                             ^~~~~~~~~~
CMakeFiles/calib_k4a.dir/build.make:75: recipe for target 'CMakeFiles/calib_k4a.dir/src/camera_extrinsics.cpp.o' failed
make[2]: *** [CMakeFiles/calib_k4a.dir/src/camera_extrinsics.cpp.o] Error 1
CMakeFiles/Makefile2:82: recipe for target 'CMakeFiles/calib_k4a.dir/all' failed
make[1]: *** [CMakeFiles/calib_k4a.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2

操作步骤

执行以下命令后触发编译错误:

git clone https://github.com/stytim/k4a-calibration.git
cd k4a-calibration
mkdir build && cd build
cmake ..
make

运行环境

Ubuntu 18.04

错误原因

项目代码直接访问了OpenCV中cv::aruco::Board类的protected成员dictionary,而高版本OpenCV(如当前使用的OpenCV4)限制了该成员的访问权限,不允许外部直接调用。

修复方法

修改src/camera_extrinsics.cpp文件第213行的代码,将直接访问board->dictionary替换为调用Board类提供的公共接口getDictionary():

原代码:

cv::aruco::detectMarkers(gray, board->dictionary, markerCorners, markerIds, params);

修改后代码:

cv::aruco::detectMarkers(gray, board->getDictionary(), markerCorners, markerIds, params);

修改完成后,重新执行make命令即可完成编译。

内容的提问来源于stack exchange,提问作者anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:24:16