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

十八、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

十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第1张图片
在这里插入图片描述

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

## 安装 unzip 
sudo apt install unzip

##解压
unzip opencv-3.4.16.zip

十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第2张图片

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 ..

十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第3张图片
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第4张图片

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

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

编译过程很漫长
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第5张图片
编译完成之后,build文件夹下面多了一堆文件
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第6张图片

安装前 /usr/local/lib 目录下只有一个 python3.8 文件夹
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第7张图片
安装前 /usr/local/include 目录下是空的
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第8张图片

安装后 /usr/local/lib 目录下多了一堆 opencv的库
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第9张图片

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

这两个文件里头就是一堆 opencv 的头文件
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第10张图片

3. 配置环境

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

打开后的文件是空的,添加 opencv 库的安装路径:/usr/local/lib
先按下 i,进入 insert 模式,然后键盘输入内容,然后按下 esc 退出编辑模式,输入 :wq 保存并退出
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第11张图片

## 然后:更新系统共享链接库
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 保存并退出
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第12张图片

## 更新一下
sudo updatedb

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

## 再次尝试更新
sudo updatedb

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

显示 3.4.16 安装成功!
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第13张图片

4. 代码测试

4.1 录制视频

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

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

将下面内容复制进去

/*********************************************************************
打开电脑摄像头,空格控制视频录制,ESC退出并保存视频RecordVideo.avi
*********************************************************************/
#include
#include 
#include
#include
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 
#include 
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

报错了!!!为啥呢 ???
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第14张图片
因为 OpenCV 调用 imshow 函数会去打开图像窗口,显示图片
但是我用的是 WSL2,这个子系统只有命令行,没有图形化界面,所以报错了!!!
解决办法1 :你也可以把所有的图像窗口的代码都注释了,改成保存到文件夹,运行完之后,最后去文件夹查看
解决办法2 :安装图形化界面
解决办法3 :将 WSL2 更新 为 WSLg

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

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

十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第15张图片

然后再运行就OK了
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第16张图片

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 运行成功!!!!!
十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化_第17张图片

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