十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化

2023-05-16

十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化

    • 1. 下载和解压 OpenCV3.4.16
    • 2. 使用 cmake 编译 OpenCV
    • 3. 配置环境
    • 4. 代码测试
      • 4.1 录制视频
      • 4.2 打开图片
    • 5. VSCode 配置 OpenCV

注意版本冲突问题:
opencv2 系列和 opencv3 系列都会安装在 usr/local/ 下,并都会在 usr/local/include 文件夹下产生 opencv 和opencv2 两个文件夹,会产生冲突,所以想要同时安装 2 系列和 3 系列需要注意一下
opencv4 系列会在include下产生一个 opencv4 的文件夹,不会冲突

1. 下载和解压 OpenCV3.4.16

下载对应版本的 OpenCV

在这里插入图片描述
在这里插入图片描述

下载完成之后,把这个压缩包丢到 Ubuntu的家目录下
因为我这里用的是 WSL2 下的 Ubuntu20.04 ,所以直接复制过去就行了
然后,进入家目录,这个目录下输入指令进行解压

## 安装 unzip 
sudo apt install unzip

##解压
unzip opencv-3.4.16.zip

在这里插入图片描述

2. 使用 cmake 编译 OpenCV

## 进入刚刚解压好的 opencv-3.4.16文件夹
cd opencv-3.4.16

## 如果没安装 cmake,则先安装 cmake
sudo apt-get install cmake

## 安装OpenCV所需的依赖库(此安装过程有点漫长,请耐心等待)
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff5.dev libswscale-dev

## 在opencv-3.4.16文件夹下面,再新建一个 build 文件夹
mkdir build

## 进入刚刚创建好的 build 文件夹
cd build

## 使用 cmake:设置编译参数
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

在这里插入图片描述
在这里插入图片描述

## 最后用 make 进行编译:其中 -j4 表示使用 4 个线程进行编译,编译速度会快一些,当然 -j8 更快
## 注意:还是要在 build 文件夹下面进行 make
sudo make -j4

## 编译完成之后进行 OpenCV 的安装
sudo make install

编译过程很漫长
在这里插入图片描述
编译完成之后,build文件夹下面多了一堆文件
在这里插入图片描述

安装前 /usr/local/lib 目录下只有一个 python3.8 文件夹
在这里插入图片描述
安装前 /usr/local/include 目录下是空的
在这里插入图片描述

安装后 /usr/local/lib 目录下多了一堆 opencv的库
在这里插入图片描述

安装后 /usr/local/include 目录下多了两个文件 opencv 和 opencv2

这两个文件里头就是一堆 opencv 的头文件
在这里插入图片描述

3. 配置环境

## 输入指令,修改 opencv.conf 文件
sudo vim /etc/ld.so.conf.d/opencv.conf

打开后的文件是空的,添加 opencv 库的安装路径:/usr/local/lib
先按下 i,进入 insert 模式,然后键盘输入内容,然后按下 esc 退出编辑模式,输入 :wq 保存并退出
在这里插入图片描述

## 然后:更新系统共享链接库
sudo ldconfig

## 最后:修改.bashrc进行个性化设置
sudo vim /etc/bash.bashrc

## 在文件末尾加入一段话
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

## 使配置生效
source /etc/bash.bashrc

在 vim 中输入 j,光标向下移动一行,然后 输入 i,进入 insert 模式,将内容复制进去,按下 esc 退出编辑模式,输入 :wq 保存并退出
在这里插入图片描述

## 更新一下
sudo updatedb

## 如果提示“command not found”
sudo apt-get install mlocate

## 再次尝试更新
sudo updatedb

## 查看安装的版本信息
pkg-config --modversion opencv

显示 3.4.16 安装成功!
在这里插入图片描述

4. 代码测试

4.1 录制视频

我们在家目录下,新建一个文件夹,叫做 OpenCVdmeo

mkdir OpenCVdmeo
cd OpenCVdmeo
touch test.cpp
sudo vim test.cpp

将下面内容复制进去

/*********************************************************************
打开电脑摄像头,空格控制视频录制,ESC退出并保存视频 RecordVideo.avi
*********************************************************************/
#include<iostream>
#include <opencv2/opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;

int main()
{
	//打开电脑摄像头
	VideoCapture cap(0);
	if (!cap.isOpened())
	{
		cout << "error" << endl;
		waitKey(0);
		return 0;
	}

	//获得cap的分辨率
	int w = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_WIDTH));
	int h = static_cast<int>(cap.get(CV_CAP_PROP_FRAME_HEIGHT));
	Size videoSize(w, h);
	VideoWriter writer("RecordVideo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 25, videoSize);
	
	Mat frame;
	int key;//记录键盘按键
	char startOrStop = 1;//0  开始录制视频; 1 结束录制视频
	char flag = 0;//正在录制标志 0-不在录制; 1-正在录制

	while (1)
	{
		cap >> frame;
		key = waitKey(100);
		if (key == 32)//按下空格开始录制、暂停录制   可以来回切换
		{
			startOrStop = 1 - startOrStop;
			if (startOrStop == 0)
			{
				flag = 1;
			}
		}
		if (key == 27)//按下ESC退出整个程序,保存视频文件到磁盘
		{
			break;
		}

		if (startOrStop == 0 && flag==1)
		{
			writer << frame;
			cout << "recording" << endl;
		}
		else if (startOrStop == 1)
		{
			flag = 0;
			cout << "end recording" << endl;
			
		}
		imshow("picture", frame);
	}
	cap.release();
	writer.release();
	destroyAllWindows();
	return 0;
}

## 编译运行
g++ test.cpp -o test.out `pkg-config --cflags --libs opencv`
./test.out

在这里插入图片描述

## 查看一下摄像头的索引号
v4l2-ctl --list-devices

## 如果提示没有 v4l2-ctl,则先安装
sudo apt install v4l-utils

在这里插入图片描述
这是为什么呢?
在网上查了一下资料,貌似目前 WSL2 可以用 OpenCV 读图或显示视频,但是似乎不支持摄像机
不知道目前,是否有人解决了,如果有人知道解决办法,麻烦评论区告知一下,感谢!

4.2 打开图片

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;

int main()
{
	cout << "OpenCV Version: " << CV_VERSION << endl;
	Mat img = imread("hahaha.jpg");
	imshow("1440", img);
	waitKey(0);
	return 0;
}
## 编译运行
g++ test.cpp -o test.out `pkg-config --cflags --libs opencv`
./test.out

报错了!!!为啥呢 ???
在这里插入图片描述
因为 OpenCV 调用 imshow 函数会去打开图像窗口,显示图片
但是我用的是 WSL2,这个子系统只有命令行,没有图形化界面,所以报错了!!!
解决办法1 :你也可以把所有的图像窗口的代码都注释了,改成保存到文件夹,运行完之后,最后去文件夹查看
解决办法2 :安装图形化界面
解决办法3 :将 WSL2 更新 为 WSLg

这里只用演示 解决办法3 :

## 在 Windows PowerShell 中更新 WSL2
wsl --update

在这里插入图片描述

然后再运行就OK了
在这里插入图片描述

5. VSCode 配置 OpenCV

比较简单,进入 OpenCVdmeo 文件夹 ,在终端键入 code .
就可以用 VSCode 打开了
关于 VSCode 连接到 WSL2,我之前的博客有讲过:WSL2的安装与使用(Win11)

OpenCVdmeo 文件夹 下面,新建一个 .vscode 文件夹
然后创建三个文件:launch.json、tasks.json、c_cpp_properties.json

launch.json 文件的内容如下:

{
    "version": "0.2.0",
    "configurations": [        
        {
            "name": "g++.exe - 生成和调试活动文件",
            "type": "cppdbg",                                 // 只能是cppdbg
            "request": "launch",                              // launch:启动,attach:附加
            "program": "${fileDirname}/${fileBasenameNoExtension}",   // 需要调试的程序
            "args": [],                                       // 调试时传递给程序的参数
            "stopAtEntry": false,                             // 调试时是否停在程序入口:{true:是,false:否}
            "cwd": "${workspaceFolder}",                      // 工作目录
            "environment": [],                                // 额外的环境变量
            "externalConsole": false,                         // true:输出到外部终端  false:只输出到软件终端(有显示不全的可能)
            "MIMode": "gdb",
            "setupCommands": [      // 暂时不知道作用
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++ build active file",   // 预编译任务名称,和tasks.json中的label必须相同
            "miDebuggerPath": "/usr/bin/gdb"                   // 调试gdb路径
        }
    ]
}

tasks.json 文件的内容如下:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-g","-std=c++11", 
                //"${file}",                            // 单个cpp文件
                "${fileDirname}/*.cpp",                 // 多个cpp文件
                "-o", 
                "${fileDirname}/${fileBasenameNoExtension}",  // 要调试的程序,必须与launch.json文件中的"program"相同
                "-I", "${workspaceFolder}/include",     // 项目include文件
                "-I", "$/usr/local/include",          // opencv安装的include文件路径
                "-I", "$/usr/include",  
                "-L", "$/usr/local/lib",                //opencv安装的lib文件路径
                "-l", "opencv_core",                    //.so文件,文件原名称“libopencv_core.so”,注意需去除“lib”
                "-l", "opencv_imgproc",
                "-l", "opencv_imgcodecs",
                "-l", "opencv_video",
                "-l", "opencv_ml",
                "-l", "opencv_highgui",
                "-l", "opencv_objdetect",
                "-l", "opencv_flann",
                "-l", "opencv_imgcodecs",
                "-l", "opencv_photo",
                "-l", "opencv_videoio",    
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "test",
                "isDefault": true
            },
            "detail": "调试器生成任务"
        }
    ],
    "version": "2.0.0"
}

c_cpp_properties.json 文件的内容如下:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",               
                "/usr/local/include", //请确保你的opencv opencv2头文件夹安装在这个目录
                "/usr/include"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

F5 运行成功!!!!!
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化 的相关文章

随机推荐

  • STM32的IIC接口输入输出定义

    IO方向设置 PC11 端口 define SDA IN GPIOC gt CRH amp 61 0XFFFF0FFF GPIOC gt CRH 61 8 lt lt 12 define SDA OUT GPIOC gt CRH amp 6
  • 从头开始用树莓派做一个NAS【最新超详细教程】

    一 概述 众所周知在办公的时候两台电脑之间经常倒数据资料非常麻烦 xff0c 而NAS可以很好的解决这个问题 树莓派搭建NAS方法有很多 xff0c 我们之前也拍过直接用Samba FTP这些来实现NAS功能 xff0c 但是这些需要你会在
  • 串口发送通信---UART发送---STM32F4实现

    串口发送程序配置过程 xff08 HAL库 xff09 初始化串口相关参数 xff0c 使能串口 HAL StatusTypeDef span class token function HAL UART Init span span cla
  • 基于UDP的文件传输VS编程

    要求 xff1a 实现基于UDP的文件传输 xff0c 客户端发送文件 xff0c 服务端接受文件 服务端实现 xff1a include 34 stdafx h 34 include 34 iostream 34 include 34 a
  • 成功解决VSCODE运行C++的报错问题g++

    成功解决VSCODE运行C 43 43 的报错问题g 43 43 解决方案调试 很久写C 43 43 了 xff0c 直接打开C 43 43 写代码测试一下 xff0c 报错 xff0c 真一脸懵逼 捯饬很久 xff0c 解决了问题 解决方
  • linux下的环境变量

    环境变量 环境变量 xff0c 是指在操作系统中用来指定操作系统运行环境的一些参数 通常具备以下特征 xff1a 字符串 本质 有统一的格式 xff1a 名 61 值 值 值用来描述进程环境信息 存储形式 xff1a 与命令行参数类似 ch
  • 【004 关键字】extern “C“的作用是什么?

    一 extern 34 C 34 的作用 extern 34 C 34 关键字常用于C 43 43 和C混合编程中 xff0c 用于指定函数或变量采用C语言的命名和调用约定 加上extern 34 C 34 后 xff0c 会指示编译器这部
  • C++模板编程--学习C++类库的编程基础

    目录 一 函数模板二 类模板三 实现C 43 43 STL向量容器vector代码四 理解容器空间配置器allocator的重要性 一 函数模板 1 模板的意义 xff1a 对类型也可以进行参数化了 2 函数模板 lt 61 是不进行编译的
  • cmake 学习使用笔记(二)库的生成与使用

    学习使用cmake 生成及使用库 xff0c 使用cmake 生成 lib 静态库 及动态库 xff08 dll xff09 及linux 下使用的静态库 a 和 动态库 xff08 so 也称为共享库 xff09 目录 使用工具 生成库
  • cmake 学习使用笔记(五)手动编译

    目录 编译cmake 项目 构建 方式一 xff1a 可执行文件生成的在当前目录 方式二 xff1a 可执行文件生成只制定目录 记录一下手动编译 cmake 项目 编译cmake 项目 项目结构 注意 xff1a 必须要有一个 CMakeL
  • 四旋翼无人机学习第5节--STM32最小系统外围电路分析

    文章目录 1 芯片手册分析2 stm32的外部晶振手册分析2 stm32的外部上电复位手册分析3 电源放置方法4 GND放置方法5 其他元器件放置方法6 网络放置方法7 快捷键分享8 原理图绘制成果分享 快速使用芯片的最好的方式 xff0c
  • 现代C++单文件库(header only)

    nlohmann json https github com nlohmann json easyloggingpp https github com amrayn easyloggingpp
  • 一、ROS创建工作空间

    一 ROS创建工作空间 1 什么是工作空间2 创建工作空间3 编译工作空间4 创建功能包5 编译功能包 xff08 重新编译工作空间 xff09 6 设置环境变量7 运行节点 1 什么是工作空间 工作空间 xff08 workspace x
  • 二、ROS集成开发环境

    二 ROS集成开发环境 1 安装terminator2 安装VScode3 在VScode中使用ROS3 1 创建工作空间3 2 启动VScode3 3 配置VScode3 4 创建功能包3 5 编写C 43 43 文件3 6 配置CMak
  • 十一、Ubuntu18.04下VSCode配置C/C++编译环境

    十一 Ubuntu18 04下VSCode配置C C 43 43 编译环境 1 安装VSCode2 安装插件3 创建工程4 总结 1 安装VSCode 这一步就不谈了 2 安装插件 编译一些简单的cpp文件 xff0c 下面几个插件就够用了
  • 十五、Typora官方主题 + 自定义主题

    十五 Typora官方主题 43 自定义主题 1 下载官方主题2 在官方主题的基础上自定义 1 下载官方主题 首先去Typora官网下载自己喜欢的主题 xff1a 官方主题下载 例如我这里选择 Vue 我们只用到里面的两个主题文件vue c
  • linux---进程控制

    进程控制 fork函数 创建一个子进程 pid t fork void 失败返回 1 xff1b 成功返回 xff1a 父进程返回子进程的ID 非负 子进程返回 0 pid t vfork void 同样时创建一个子进程 xff0c 但是他
  • 十六、windows11下VSCode配置C/C++编译环境

    十六 windows11下VSCode配置C C 43 43 编译环境 1 安装VSCode2 中文插件3 MinGW编译器下载和配置4 VSCode配置c c 43 43 编译环境5 测试是否配置成功6 使用万能头文件 include l
  • 十七、WSL2的安装与使用(Win11)

    十七 WSL2的安装与使用 xff08 Win11 xff09 1 准备工作1 1 开启主板 BIOS 虚拟化1 2 检查是否成功开启虚拟化1 3 开启开发者模式1 4 开启所需Windows功能1 5 下载 WSL 内核升级包 2 开始安
  • 十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化

    十八 Ubuntu20 04 43 VSCode 43 Opencv3 4 16 配置 43 WSL2 可视化 1 下载和解压 OpenCV3 4 162 使用 cmake 编译 OpenCV3 配置环境4 代码测试4 1 录制视频4 2