本文是在WSL2的环境(Ubuntu 22.04)下配置opencv4.8.0+opencv-contrib,并在vscode下运行

安装环境

图片显示的是一个名为 neofetch 的命令的输出结果。neofetch 是一个命令行系统信息工具,它可以显示一个美观的 ASCII 艺术风格的系统信息摘要,包括操作系统、内核、主题、图标、终端、CPU、GPU 和内存等信息。同时也要安装lolcat . lolcat 是一个命令行工具,它可以将文本转换成彩虹色。

参考文档

参考文档1参考文档2参考文档3

个人opencv配置了4,5天,所以比较混论,希望能帮助读者,不至于添麻烦就是万幸。

安装步骤

下载依赖库

这个库不一定全,可能需要下载其他库,具体请参考“参考文档1,2 ,3”。(我个人因为学术不精,所以找了很多文档,把他们说要下的都下载了,对不起)

sudo apt-get install cmake cmake-gui
sudo apt-get install libeigen3-dev
sudo apt-get install libboost-all-dev
sudo apt-get install libgtk2.0-dev libvtk7-dev
sudo apt-get install pkg-config

下载源码

因为我们是在Linux下安装opencv,且要安装第三方库opencv-contrib,所以只能选择源码编译

opencv官网

opencv-4.8.0.zip: https://codeload.github.com/opencv/opencv/zip/refs/tags/4.8.0

opencv-contrib-4.8.0.zip: https://codeload.github.com/opencv/opencv_contrib/zip/refs/tags/4.8.0

解压,准备编译(最难的一步)

将下载下来的源码解压,并将contrib源码文件夹移动到opencv文件夹中。

进入源码目录,新建build文件夹,并进入

build文件夹用来存放编译生成的文件


mkdir -p build 
cd build
--------------------仅安装opencv ,执行下边命令----------------------------
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local .. 
---------------------安装opencv基础版以及opencv-contrib,执行下边命令---------------------------
sudo cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=/mnt/d/opencv-4.8.0/opencv_contrib-4.8.0/modules -D BUILD_JAVA=OFF -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_GENERATE_PKGCONFIG=YES -D OPENCV_ENABLE_NONFREE=True .. 
PS: 第二个选项OPENCV_EXTRA_MODULES_PATH是指扩展包的路径,所以/mnt/d/opencv-4.8.0/opencv_contrib-4.8.0/modules 为你的opencv-contrib 的modules文件夹路径。
PPS: 这里我关闭了python的语言接口,虽然opencv3是ON,但是测试发现不支持python语言,有需要的可以把python2也设置为ON

sudo make -j8  # 编译一阵子
sudo make install

cmake 成功的情况

make 成功

install成功

环境配置


打开文件 :
sudo nano /etc/ld.so.conf
文件中添加:
include /usr/local/lib 
退出保存

# 这么做目的是避免出现 error while loading shared libraries错误 
cd /etc/ld.so.conf.d/
ls # 查看应该是没有opencv.conf的,则新建
sudo touch opencv.conf
sudo nano opencv.conf
文件内容:
/usr/local/lib 
退出保存

sudo ldconfig

修改 :
sudo nano /etc/bash.bashrc 
文件末尾添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
退出保存
source /etc/bash.bashrc

如果是zsh:

//打开~./zsh
sudo nano ~/.zshrc
//设置环境变量
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
//保存(ctrl + X)
//重新加载 .zshrc 文件以应用更改:
source ~/.zshrc


查看opencv安装成功情况

pkg-config opencv --modversion


如果有如下情况,则自己创建一个文件

cd /usr/local/lib/pkgconfig
touch opencv.pc
sudo gedit opencv.pc
文件内容添加 :
prefix=/usr/local
exec_prefix=${prefix}
includedir=/usr/local/include
libdir=/usr/local/lib
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.8.0
Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}
退出保存

最后验证

以我的文件目录为例,进入源代码文件夹/opencv-4.8.0/samples/cpp/example_cmake文件夹下

打开终端输入:

 mkdir build
 cd build
 cmake ..

输出如下结果:
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/d/opencv-4.8.0/samples/cpp/example_camke/build

然后执行

make


运行示例程序:
在build文件夹下继续输入

./opencv_example

我尝试的时候因为没有摄像头,所以只有Hello OpenCV白字。背景为黑色

6.VSCode 配置

c_cpp_properties.json 编写代码时,接口提示链接。

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
              	"${workspaceFolder}/**",
                "/usr/include/c++/**",
                "/usr/include/eigen3/**",
                "/usr/local/include/opencv4/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

task.json 执行F5 时,运行程序所需编译参数,配置如下:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: gcc.exe build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/bin/${fileBasenameNoExtension}",
                "-I", "/usr/include/eigen3",
                "-I", "/usr/local/include/opencv4",
                "-L", "/usr/local/lib/",
                "/usr/local/lib/libopencv_*"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

launch.json配置

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/bin/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "Set Disassembly Flavor to Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: gcc.exe build active file"  // 调试前的预执行任务,这里的值是tasks.json文件中对应的编译任务,也就是调试前需要先编译
        }
    ]
    
}

踩过的坑

在Ubuntu22.04的环境下编译opencv4.5.1

由于opencv4.5.1早于22.04,所以cmake时会不断报错。要注意

写在最后的话

opencv配置了5天,踩过不少坑,每一次配置环境总是最折磨的,但是一定要坚持下去,一遍一遍尝试,总能尝试出问题,比如猜想“opencv4.5.1早于22.04”,在第2天就想出来了,但是一直没有实践,直到今天才决定放弃4.5.1,去尝试4.8.0. 我这篇文章不是很详细,还是希望多看看csdn的文章。下面列一下我看过的,觉得有用的。每个都是取一部分,希望我的文章可以有一点用

https://blog.csdn.net/raw_inputhello/article/details/131513355

https://blog.csdn.net/weixin_41809117/article/details/137076621

https://blog.csdn.net/ahy86045/article/details/129792367

https://blog.csdn.net/yzcece/article/details/84661329

https://blog.csdn.net/qq_42475191/article/details/123419952

一个努力学习的憨憨
最后更新于 2024-08-04