ubuntu22.04安装OpenCV及Opencvcontrib,cuda,cudnn,pytorch

目录

  • 安装CUDA及CUDNN
  • 安装依赖项
  • 编译
  • 配置VSCODE
  • 配置CLion

安装CUDA及CUDNN

由于已经安装了驱动,直接看nvida-smi,支持的最高CUDA版本是12.2,好像听说Pytorch最高支持到12.1,所以选择了12.1,具体安装参见
ubuntu22.04安装显卡驱动、CUDA及cudnn以及Ubuntu20.04安装cuDNN(包括WSL),里面介绍的很详细了。

安装依赖项

在安装前,首先安装相应的依赖项

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

其中,libjasper-dev的安装会出现问题,提示无法定位该包

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

运行上述命令,又会提示出现以下提示:

W: GPG 错误:http://security.ubuntu.com/ubuntu xenial-security InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
E: 仓库 “http://security.ubuntu.com/ubuntu xenial-security InRelease” 没有数字签名。
N: 无法安全地用该源进行更新,所以默认禁用该源。
N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。

解决方案如下:没有数字签名,禁用该源
还有这个ubuntu22.04(opencv安装):python-dev、python-numpy、libdc1394-22-dev无法安装问题

编译

Ubuntu18.04安装opencv4.5.1+contrib 支持cuda加速(附带编译好的opencv4.5.1及缺失文件)
Ubuntu系统编译opencv4.0以上以及opencv_contrib
Ubuntu20.04安装opencv4.4.0+opencv-contrib4.4.0 及错误
这几篇文章里面介绍的比较详细了,另外,我还在ippicv这里卡了很久,可以参见这篇文章
OpenCV中手动安装ippicv(ubuntu)
[学习笔记-OpenCV篇]opencv ippicv下载超时-无法下载问题解决
Ubuntu opencv 坑
但是其中需要将下载好的文件替换掉链接的部分,到底应该写成

file:/home/rotga/opencv/opencv-4.8.0/3rdparty/ippicv/

还是

file:///home/rotga/opencv/opencv-4.8.0/3rdparty/ippicv/

还是没有搞清楚,最后我写的是上面的。
利用cmake的gui预编译时,第一次编译opencv主体过去后,还需要搜索nonfree,将其打上勾,搜索extra,将扩展包的module文件夹的路径填入,再搜索wechat,将其不要打勾,搜索qt,不要打勾,搜索face,不要打勾,所有xfeature2d,不要打勾,搜索cuda,打上勾,再次config,没有红字产生后,再次搜索cuda,有个fastmath,打上勾,搜索test,将所有小写的test的项都不要打勾。generate。
下面就开始编译,还是在这个打开camke gui 的文件夹下,命令行输入

sudo make -j16

因为我的CPU是16核,所以用16的参数。

配置VSCODE

Ubuntu20.04/Ubuntu22.04 配置VScode+Opencv+cmake(C++)
经过查找资料,目前我的VSCODE的配置如下:
c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/local/include/opencv4/**",			//记得把opencv4的include路径包含,按我上述方法来安装opencv的话一般就是这个路径
                "/usr/include/opencv4/**",
                "/usr/include/x86_64-linux-gnu/sys"		//这是装了cuda的路径,如果无cuda请去除
                "/opt/ros/humble/**"                        //这是ROS2里面的头文件包含目录
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

tasks.json

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            //"command": "/usr/bin/cpp",                  //不能用这命名, 否则你可能会i报错 gdb failed with message 'file format not recognized'
            "command": "/usr/bin/g++", 
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}.out",
                "`pkg-config","--libs","--cflags","opencv4`"	//这是添加第三方库代码,要添加什么库直接继续加就行,不要忘记了 ` 符号
                //如下面再加个 gazebo11 第三方库(你得保证你安装的第三方库中含有.pc文件)
              // "`pkg-config","--libs","--cflags","opencv4,gazebo11`"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

launch.json

{
    "configurations": [
        {
            "name": "C/C++: cpp 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}.out",
            "args": [
                "`pkg-config","--libs","--cflags","opencv4`",
            ],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ build active file",		//要和 task.json的label字段一致
            "miDebuggerPath": "/usr/bin/gdb",
            //下面这行命令可以去除Vscode中编译后出现 [1]+   Done....  的提示
            "miDebuggerArgs": "-q -ex quit; wait() { fg >/dev/null; }; /usr/bin/gdb -q --interpreter=mi"
        }
    ],
    "version": "2.0.0"
}

需要注意的是,在tasks.json和launch.json中的args字段中都有"pkg-config","--libs","--cflags","opencv4",这一行,经过试验和查找资料,发现,tasks.json中的这行控制着所用opencv版本,即编译要使用该版本的库。而我的计算机中,目前装着两个版本的OPENCV,一个是ros2自带的4.5.4和自己安装的4.8.0,前者装在/usr下,对应的库是在/usr/lib头文件是在/usr/include/opencv4下面,而后者是安装在/usr/local下,对着的库是在/usr/local/lib头文件是在/usr/local/include/opencv4下面,这两个对应的pkgconfig文件夹是在/usr/lib和/usr/local/lib下,(后者在编译时默认不产生pc文件,这个在安装时没有注意,后来自己创建的),前者的pc文件是opencv4.pc,后者是opencv.pc(自己创建的)。经过对比,发现,ros2自带的opencv虽然版本不是最新,但是编译出来的包是最全的,包括了所有opencv的包。对于目前的我而言,应该是够用了。

配置CLion

废话不多说,贴上cmakelists的代码。在此之前说一句,没有经过任何配置,即在默认状态下,CLion也是可以编译出含opencv的程序的,而且是使用的自己安装的opencv4.8.0,而且是在自己创建opencv.pc之前,这就有点奇怪了。

cmake_minimum_required(VERSION 3.26)
project(firstProject)

set(CMAKE_CXX_STANDARD 11)

#set(OpenCV_DIR "/usr/local/lib/cmake/opencv4/") # 如需使用自己安装的opencv4.8.0,启动此行
set(OpenCV_DIR "/usr/lib/x86_64-linux-gnu/cmake/opencv4") # 如需使用ROS2自带的opencv4.5.4,启用此行
#set(TARGET_LIBS "/usr/local/include/opencv4/opencv2/") # 如需使用自己安装的opencv4.8.0,启动此行
set(TARGET_LIBS "/usr/include/opencv4/opencv2/") # 如需使用ROS2自带的opencv4.5.4,启用此行
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/lib)

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(firstProject ${OpenCV_LIBS})

其中,firstProject是我的项目名称。
当然,把这些配置写上去后,CLion就会根据配置选用不同的opencv版本。

你可能感兴趣的:(opencv,ubuntu,vscode)