OpenCV4开发的环境配置

OpenCV4开发的环境配置

折腾一下午,总算配好了。

本环境配置方案为VirtualBox虚拟机(ubuntu20.04)+外部vscode使用SSH远程连接虚拟机编辑

前置准备

Oracle VM VirtualBox

ubuntu20.04镜像iso安装文件

Xming

OpenCV

OpenCV_Contrib

其中OpenCV和OpenCV_Contrib下载source code(zip)

注意两者的版本号要一致,教程以4.5.5为例。

虚拟机安装

软件安装

直接默认即可,安装目录可自定义

虚拟机安装

点击新建,配置如图。

文件夹是存放虚拟机文件的位置,可自定义。

内存分配按需即可,本人分配为2048MB

虚拟硬盘创建,本人分配为30G,实际20G足够用,看自己需要。

创建好虚拟机,到虚拟机设置中挂载iso,随后即可启动虚拟机。

安装好ubuntu后,即可进入下一步。

安装依赖项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 libdc1394-22-dev

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

sudo apt install -y g++
sudo apt install -y cmake
sudo apt install -y make
sudo apt install -y wget unzip

sudo apt update
sudo apt install libopencv-dev python3-opencv

sudo apt install build-essential git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

opencv库编译与配置

将前面下载的OpenCV和OpenCV_Contrib导入虚拟机解压,目录可自定义。

注意OpenCV_Contrib应当解压到opencv文件夹内,即如图:

上图文件夹内新建文件夹build,并在终端打开。

在终端输入以下指令编译:

1
2
3
cmake ..
sudo make
sudo make install

等待编译完成,此处编译时间较长,需要等待。

将opencv库添加至系统路径:

1
sudo gedit /etc/ld.so.conf.d/opencv.conf

opencv.conf中添加:

1
/usr/local/lib

保存后执行下面命令使配置生效:

1
sudo ldconfig

配置bash:

1
sudo gedit /etc/bash.bashrc

在文件末尾加上:

1
2
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH

保存后执行下面命令使配置生效

1
source /etc/bash.bashrc

更新配置:

1
sudo updatedb

接着在终端中打开opencv-4.5.5/sample/cpp/example_cmake

新建文件夹build,在终端打开后执行:

1
2
make -j8
./opencv_example

若出现Hello OpenCV则说明配置成功。

外部VSCode配置

SSH远程连接

到虚拟机设置中将网络连接方式设置为桥接(如果本步有问题可以重启一次虚拟机确保配置更新)。

在虚拟机中查看ip

1
2
sudo apt install net-tools
ifconfig

直接使用ifconfig是没有用的,因为没有安装工具包。

注意ip是第一个,且不是127.0.0.1的那个。

接着到vscode中安装扩展包。

安装完成后新建远程连接。

输入以下指令即可连接(若有密码会提示需要输入密码):

1
ssh <user_name>@<your_ip>

是你的ubuntu用户名,即刚才查的ip。

免密连接

在windows的cmd中输入:

1
2
ssh-keygen
scp ~/.ssh/id_rsa.pub <user_name>@<your_ip>:

其中意义同上。

接着到虚拟机的终端中输入:

1
2
touch ~/.ssh/authorized_keys
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

然后再打开虚拟机的id_rsa.pub检查是否与windows的一致,不一致直接到windows的用户文件夹下的.ssh文件夹复制id_rsa.pub内容到虚拟机的id_rsa.pub即可。

可使用以下命令打开编辑:

1
gedit ~/id_rsa.pub

接着重启vscode,若不提示输入密码则配置成功。

编译配置

以下仅为示例,按需配置。

.vscode/c_cpp_properties.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/include/opencv4/**",
"/usr/include/opencv4"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++14",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}

.vscode/task.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"`pkg-config --cflags --libs opencv4`"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}

GUI界面调用

安装Xming,安装默认即可,目录可自定义。

接着启动Xlaunch。

display number一般默认为0,无需修改。

后面的也是默认配置即可。

然后到Xming的安装目录打开X0.host文件,将你的虚拟机ip填入,即:

1
2
localhost
你的虚拟机ip

localhost是本来文件中就有的,不需要动。

随后到vscode中安装Remote X11(SSH)插件。

安装完成后打开ssh的设置。

打开.ssh/config,将配置修改为:

1
2
3
4
5
6
Host <your_ip>
HostName <your_ip>
ForwardX11 yes
ForwardX11Trusted yes
ForwardAgent yes
User <user_name>

保存后到虚拟机终端内输入:

1
sudo gedit ~/.bashrc

在最后加一行:

1
export DISPLAY="localhost:10.0"

保存后更新配置:

1
source ~/.bashrc

输入下面指令验证配置:

1
echo $DISPLAY

若显示:

1
localhost:10.0

则说明配置成功。

接着在.vscode/launch.json中的env增加"DISPLAY":"localhost:10.0"

即:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: 当前文件",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"env": {
"DISPLAY": "localhost:10.0"
},
}
]
}

最后在vscode的终端中输入xclock,若显示下图则说明GUI配置成功。