项目场景:ORBSLAM3_ROS编译

在智能车环境中编译ORBSLAM3,并试图调用ROS接口
小车环境:Ubuntu18.04 ROS melodic Opencv 4.1.0 xtark机器人 Nvidia Jetson

其实最方便的做法应该是交叉编译,但是目前我的虚拟机和小车的opencv,boost库的版本对不上,盲目交叉编译肯定会有很多问题

所以暂时把目标又放在了小车编译上


问题描述

编译时报错:error:'CV_BGR2GRAY' was not declared error:'CV_LOAD_IMREAD_UNCHANGED' was not declared

同时,还有cmakelists报错:opencv not found
例如: in map.cc 498,9

//cout << "KF " << pKFi->mnId << endl;
        cv::Mat img_i = cv::imread(pKFi->mNameFile,CV_LOAD_IMREAD_UNCHANGED);
        //cout << "Image -> " << img_i.cols << ", " << img_i.rows << endl;
        cv::cvtColor(img_i, img_i,CV_COLOR_BGR2GRAY);

	}

原因分析:

原因就是opencv4已经不支持这些古老的宏定义了。但是ORBSLAM3依然使用,而且文档里并没有说不能使用opencv4编译


解决方案:

解决方案有两种
第一种是把代码文件的头文件修改成原来的带有c宏定义的头文件

比如添加opencv2/imgproc/imgproc_c.h opencv2/highgui/highgui_c.h

第二种就是将src中代码文件的相关宏定义都修改一边,这样一劳永逸,比较推荐

原始 修改成
CV_LOAD_IMREAD_UNCHANGED cv::IMREAD_UNCHANGED
CV_BGR2GRAY cv::COLOR_BGR2GRAY
CV_REDUCE_SUM cv::REDUCE_SUM
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐