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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:22:07