十八、Ubuntu20.04 + VSCode + Opencv3.4.16 配置 + WSL2 可视化
- 1. 下载和解压 OpenCV3.4.16
- 2. 使用 cmake 编译 OpenCV
- 3. 配置环境
- 4. 代码测试
-
- 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 ,所以直接复制过去就行了
然后,进入家目录,这个目录下输入指令进行解压
sudo apt install unzip
unzip opencv-3.4.16.zip
2. 使用 cmake 编译 OpenCV
cd opencv-3.4.16
sudo apt-get install cmake
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 CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make -j4
sudo make install
编译过程很漫长
编译完成之后,build文件夹下面多了一堆文件
安装前 /usr/local/lib
目录下只有一个 python3.8 文件夹
安装前 /usr/local/include
目录下是空的
安装后 /usr/local/lib
目录下多了一堆 opencv的库
安装后 /usr/local/include
目录下多了两个文件 opencv 和 opencv2
这两个文件里头就是一堆 opencv 的头文件
3. 配置环境
sudo vim /etc/ld.so.conf.d/opencv.conf
打开后的文件是空的,添加 opencv 库的安装路径:/usr/local/lib
先按下 i,进入 insert 模式,然后键盘输入内容,然后按下 esc 退出编辑模式,输入 :wq 保存并退出
sudo ldconfig
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
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
将下面内容复制进去
#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;
}
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;
char flag = 0;
while (1)
{
cap >> frame;
key = waitKey(100);
if (key == 32)
{
startOrStop = 1 - startOrStop;
if (startOrStop == 0)
{
flag = 1;
}
}
if (key == 27)
{
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
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 :
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",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ build active file",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
tasks.json 文件的内容如下:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ build active file",
"command": "/usr/bin/g++",
"args": [
"-g","-std=c++11",
"${fileDirname}/*.cpp",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"-I", "${workspaceFolder}/include",
"-I", "$/usr/local/include",
"-I", "$/usr/include",
"-L", "$/usr/local/lib",
"-l", "opencv_core",
"-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",
"/usr/include"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
F5 运行成功!!!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)