Ubuntu 20.04源码编译安装OpenCV 4.7.0

目录

前言

1--下载OpenCV 4.7.0

2--编译安装OpenCV 4.7.0

3--测试

3-1--查看安装的版本

3-2--基于VSCode和CMake测试项目

4--报错解决(重点!)

4-1--OpenCV与FFmpeg不兼容

4-2--LIBTIFF报错

4-3--系统与Anaconda的库lib冲突

4-4--测试时CMake的find_package报错


前言

        建议先看第4节相关报错及解决方法,再进行安装!

1--下载OpenCV 4.7.0

        下载 OpenCV 4.7.0 的源码 Sources:OpenCV 4.7.0

Ubuntu 20.04源码编译安装OpenCV 4.7.0_第1张图片

2--编译安装OpenCV 4.7.0

① 解压压缩包:

unzip opencv-4.7.0.zip

② 安装依赖:

cd opencv-4.7.0

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev

③ 编译:

mkdir build 

cd build

cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TIFF=ON ..

注:-DBUILD_TIFF=ON 的作用在之后报错的章节中会说明;

④ 安装:

sudo make install -j8

# -j8表示CPU将使用多线程,加快安装速度

3--测试

3-1--查看安装的版本

pkg-config --modversion opencv4

        一般情况下,正常输入上面的命令就可以直接查看安装的版本,如果失败可以参考链接1进行配置环境;

3-2--基于VSCode和CMake测试项目

① 编写 main.cpp 文件:

# include
# include"opencv2/opencv.hpp"
 
using namespace cv;
 
int main(){
    printf("Hello, Opencv4!\n");
    Mat image = imread("./test1.jpg"); // 读取图片
 
    namedWindow("img1"); // 创建窗口
    imshow("img1", image); // 显示读取的图片
    waitKey(0);
    return 0;
}

② 使用 g++ 直接编译:

g++ main.cpp -o test `pkg-config --cflags --libs opencv4`

③ 使用 CMakeLists.txt 进行编译:

cmake_minimum_required(VERSION 3.10)  # 指定 cmake的 最小版本
project(test) # 设置项目名称
#set(OpenCV_DIR /usr/local/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
add_executable(main main.cpp) # 生成可执行文件
target_link_libraries(main ${OpenCV_LIBS} ) # 设置target需要链接的库
mkdir build

cd build

cmake ..

make

./main

Ubuntu 20.04源码编译安装OpenCV 4.7.0_第2张图片

4--报错解决(重点!)

4-1--OpenCV与FFmpeg不兼容

        博主在使用Ubuntu安装OpenCV前,曾基于源码编译安装过FFmpeg 5.1,两者存在冲突,会出现以下错误:

        ① modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o] Error 1;
        ② modules/videoio/CMakeFiles/opencv_videoio.dir/all] Error 2

        ③ make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/build.make:302: lib/libopencv_videoio.so.4.7.0] Error 1;

        ④ relocation R_X86_64_PC32 against symbol `ff_pw_9' can not be used when making a shared object; recompile with -fPIC;

        出现上面几个错误,均与博主源码编译安装的FFmpeg 5.1有关。

Ubuntu 20.04源码编译安装OpenCV 4.7.0_第3张图片

解决方法:卸载FFmpeg 5.1,博主改用FFmpeg 4.3得以兼容;

4-2--LIBTIFF报错

        博主在编译安装OpenCV时,出现了以下 LIBTIFF 的错误:

        ① /usr/bin/ld: ../../lib/libopencv_imgcodecs.so.4.7.0: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0';

        ② make[2]: *** [modules/core/CMakeFiles/opencv_test_core.dir/build.make:812: bin/opencv_test_core] Error 1;

        ③ make[1]: *** [CMakeFiles/Makefile2:1985: modules/core/CMakeFiles/opencv_test_core.dir/all] Error 2 make: *** [Makefile:163: all] Error 2;

解决方法:在编译安装的时候加上 -DBUILD_TIFF=ON 的选项,这里参考链接2

cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TIFF=ON ..

Ubuntu 20.04源码编译安装OpenCV 4.7.0_第4张图片

4-3--系统与Anaconda的库lib冲突

        博主在编译安装OpenCV的时候,出现了以下错误:

        ① /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libfontconfig.so: undefined reference to `uuid_parse@UUID_1.0';

        ② make[2]: *** [modules/highgui/CMakeFiles/opencv_test_highgui.dir/build.make:122: bin/opencv_test_highgui] Error 1;

        ③ make[1]: *** [CMakeFiles/Makefile2:2938: modules/highgui/CMakeFiles/opencv_test_highgui.dir/all] Error 2 make: *** [Makefile:163: all] Error 2;

Ubuntu 20.04源码编译安装OpenCV 4.7.0_第5张图片

        报错的原因是Conda 的库与系统的库出现了冲突,具体分析可参考链接3;但博主并没有采用参考链接的解决方法,而是猜测只是由于博主在编译 OpenCV 的时候,并没有退出 Conda 环境;

解决方法:在终端退出Conda环境重新进行编译安装;

conda deactivate

4-4--测试时CMake的find_package报错

        博主在 VSCode 进行程序测试时,无法利用 CMakeLists.txt 进行间接编译,出现了以下错误:

        ① By not providing "FindOpencv.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Opencv", but CMake did not find one.

        ② Could not find a package configuration file provided by "Opencv" with any
  of the following names: OpencvConfig.cmake opencv-config.cmake;

Ubuntu 20.04源码编译安装OpenCV 4.7.0_第6张图片

         一开始,博主以为是没有设置 OpenCV_DIR 导致以上报错,所以参考其它答案使用了 Set 命令设置 OpenCV_DIR,但并不能解决;

        真正的原因其实是,一开始博主在 CMakeLists.txt 中的 find_package(Opencv REQUIRED)使用的小写的 cv,这才导致了错误。但博主在 Windows 和 Mac 系统下都使用了小写的 Opencv 并没有任何错误(离大谱,属实过分!!!),所以这里不确定真正的原因,部分博主分析了可能的原因,具体可参考链接4;

解决方法:将find_package的Opencv改为OpenCV;

衷心建议结合OpenCV Github项目的issue(问题专栏)进行编译安装!!!

你可能感兴趣的:(Opencv(C++)学习笔记,Linux笔记,opencv,ubuntu,计算机视觉)