Ubuntu 22.04下如何指定OpenCV 4.x版本编译C++代码?
问题描述
Ubuntu 22.04系统中存在多个OpenCV版本(一个通过apt安装,其余为源码编译的3.4.10和4.x版本),编译运行调用OpenCV的C++代码时出现错误,需要将默认使用的OpenCV版本切换为4.x。
相关代码与错误信息
C++代码(main.cpp)
#include "opencv2/opencv.hpp" #include "opencv2/highgui/highgui.hpp" using namespace cv; int main() { std::string image_path = samples::findFile("starry_night.jpg"); Mat img = imread(image_path, IMREAD_COLOR); if(img.empty()) { std::cout << "Could not read the image: " << image_path << std::endl; return 1; } imshow("Display window", img); int k = waitKey(0); if(k == 's') { imwrite("output.png", img); } return 0; }
CMakeLists.txt
cmake_minimum_required(VERSION 3.0) project(zooming) add_executable(zooming main.cpp) find_package( OpenCV REQUIRED ) target_link_libraries(zooming ${OpenCV_LIBS}) #install(TARGETS zooming RUNTIME DESTINATION bin)
运行错误信息
[ WARN:0] cv::samples::findFile('starry_night.jpg') => '' terminate called after throwing an instance of 'cv::Exception' what(): OpenCV(3.4.10) /home/user/Softwares/OpenCV_3.4.10/opencv-opencv-25a1900/modules/core/src/utils/samples.cpp:62: error: (-2:Unspecified error) OpenCV samples: Can't find required data file: starry_night.jpg in function 'findFile'
解决方法
方法1:编译时直接指定OpenCV 4.x路径
执行cmake命令时,通过-DOpenCV_DIR参数指定4.x版本的CMake配置文件路径(通常是源码编译时指定的安装目录下的lib/cmake/opencv4):
# 替换为你实际的OpenCV 4.x安装路径,示例路径为/usr/local/opencv4 cmake -DOpenCV_DIR=/usr/local/opencv4/lib/cmake/opencv4 .. make ./zooming
方法2:临时设置环境变量(仅当前终端生效)
在编译前,将OpenCV 4.x的配置路径和库路径加入环境变量,让CMake优先找到该版本:
# 替换为你的OpenCV 4.x安装路径 export OpenCV_DIR=/usr/local/opencv4/lib/cmake/opencv4 export LD_LIBRARY_PATH=/usr/local/opencv4/lib:$LD_LIBRARY_PATH # 正常编译运行 cmake .. make ./zooming
方法3:修改CMakeLists.txt强制指定版本
在find_package行添加版本要求,让CMake仅查找4.x版本:
修改后的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0) project(zooming) add_executable(zooming main.cpp) # 指定需要OpenCV 4.x版本,也可写具体版本如4.5.5 find_package( OpenCV 4 REQUIRED ) target_link_libraries(zooming ${OpenCV_LIBS}) #install(TARGETS zooming RUNTIME DESTINATION bin)
修改后执行常规编译流程即可。
辅助:查找OpenCV配置文件路径
如果不知道4.x版本的安装路径,用以下命令查找系统中所有OpenCV配置文件:
find / -name "OpenCVConfig.cmake" 2>/dev/null
输出结果中带有opencv4的路径就是4.x版本的配置文件所在位置。
内容的提问来源于stack exchange,提问作者user153245
相关产品推荐
相关产品推荐

