wsl(Ubuntu 18.04 LTS)安装openCV3.4.16和openCV_contirb3.4.16

1.wsl安装教程

可以按照下面教程进行安装,推荐使用Windows Terminal和

wsl安装教程:

https://www.jianshu.com/p/a20c2d58eaac

Windows Terminal安装教程:

https://blog.csdn.net/engrossment/article/details/102623120

2.安装编译依赖环境

2.1 安装cmake

首先需要安装cmake,可以直接用apt-get进行安装,但是版本较低,也可以用源码进行编译安装,版本比较高,但是比较麻烦,低版本也是可以的,记住在CMakeLists.txt里面改CmakeVersion就行了。需要高版本可以参考这下面链接:

https://www.linuxidc.com/Linux/2018-09/154165.htm

apt安装如下:

sudo apt-get install cmake

安装完成后用cmake --version查看是否安装完成以及版本。

def@DESKTOP-7MMULM3:~$ cmake --version
cmake version 3.10.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

2.2 安装其他依赖

安装依赖环境

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev \
	libjpeg-dev libswscale-dev libtiff5-dev libgtk2.0-dev pkg-config

3.下载与安装OpenCV和OpenCV_contrib

3.1 下载openCV和OpenCV_contrib

下载地址OpenCVOpenCV_Contrib,里面列出了不同版本以及不同来源的OPenCV,可以下载Sources或者github进行clone。

img

选择需要的版本,下载Source Code即可。唯一需要注意的是OpenCV的代码要和Contrib的代码版本保持一致,否则会出错。推荐使用OpenCV-3.4.16版本,下载源码。

3.2 配置代码

下载好代码后,使用tar -zxvf命令分别解压文件,并将解压后的Contrib的文件夹放在OpenCV目录下,如下所示。

img

然后在OpenCV文件夹下建个build的文件夹用于存放生成的一些文件。这样,相关文件配置就完成了

3.3 编译安装OpenCV

进入build文件夹,

cd opencv-3.4.16/build

配置cmake选项

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D OPENCV_EXTRA_MODULES_PATH=/home/opencv/opencv-3.4.16/opencv_contrib3.4.16/modules/ ..

其中OPENCV_EXTRA_MODULES_PATH=/home/opencv/opencv-3.4.16/opencv_contrib3.4.16/modules/ …
是指opencv_contrib-3.2.0中modules所在的路径,后面的两点不可省略

如果不安装opencv_contrib配置选项为

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_GENERATE_PKGCONFIG=ON ..

cmake很容易失败,查看失败原因大多是因为依赖环境没有安装成功,很有可能是国内网络环境问题,检查一下你的Ubuntu源有没有更改为国内的镜像源,或者再次重新安装对应依赖。
cmake结束后进行make编译

sudo make -j8

完成后再进行安装

sudo make install

3.4 配置环境

sudo vim /etc/ld.so.conf

在里面加上一行 /usr/loacal/lib,其中 /user/loacal 是opencv安装路径也就是makefile中指定的安装路径,结果如下:

include /etc/ld.so.conf.d/*.conf
/usr/local/lib

完成后ESC再输入:wq保存退出。

运行

sudo ldconfig

然后修改bash.bashrc文件

sudo vim /etc/bash.bashrc

在文件末尾加入:

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

然后进行souce,更新环境变量

source /etc/bash.bashrc

3.5 检验安装版本

pkg-config --modversion opencv4 或者 pkg-config --modversion opencv 检测OPenCV4或OPenCV的安装版本.

$ pkg-config --modversion opencv
3.4.16

至此OPenCV已经安装完成,如果想要测试一下在程序里面的调用的话可以接着往下看。

4.安装VcXsrv实现xfce4图形化界面

如果要在WSL上面运行图像化程序,需要安装一个Xserver,推荐从SourceForge中安装VcXsrv,使用默认安装.

4.1 配置与启动xfce4

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install xfce4
sudo apt install xfce4-session

4.2 wsl设置DISPLAY环境变量

由于WSL2其实是用Hyper-V技术实现的一个虚拟机,和WSL1的工作原理不一样,因此如果使用之前网上的方法直接设置DISPLAY=:0.0的话,启动xfce4的时候会出现下面的错误:

lpwm@DESKTOP-FI0NTIP:~$ startxfce4
/usr/bin/startxfce4: X server already running on display :0.0
xrdb: Connection refused
xrdb: Can't open display ':0.0'
Unable to init server: Could not connect: Connection refused
xfce4-session: Cannot open display: .
Type 'xfce4-session --help' for usage.

需要在WSL里面config一下:

sudo vim ~/.bashrc

在末尾添加以下内容

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0

然后source使得配置生效

source ~/.bashrc

4.3 配置防火墙

配置防火墙,外界网络访问 VcXsrv 的端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0lJ7Gif-1636711152833)(https://raw.githubusercontent.com/Toyakoyo2018/picBed/master/img/20211112174221.webp)]

4.4 启动VcXsrv

Display settings: One large window
How to start clients: Start no client
Disable access control: Yes:一定要选这一项,WSL 2 相当于远程(外界)网络了,和 Windows 10 是分开的,和 WSL 1 不一样

img

完成后,单击“完成”以启动X服务器。如果Windows防火墙提示,请确保允许从公用网络和专用网络都连接到 VcXSrv。双击系统任务栏中的X图标,将 VcXSrv 带入前台。现在,您将看到黑屏,因为 Linux 中还没有运行图形化的 X11 应用程序。

4.5 时钟测试

sudo apt install x11-apps
xclock

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TZPyU3dU-1636711152838)(https://raw.githubusercontent.com/Toyakoyo2018/picBed/master/img/20211112175140.webp)]

4.6 启动Ubuntu桌面

startxfce4

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VG01IOn5-1636711152839)(https://raw.githubusercontent.com/Toyakoyo2018/picBed/master/img/20211112175226.png)]

5. 程序测试

5.1 样例测试

在你的OpenCV安装包里面有样例代码,可以用于测试,比如这个路径:/opencv-3.4.16/samples/cpp/example_cmake,如此测试

$ cmake .
$ make
$ ./opencv_example

输出

Built with OpenCV 4.3.0
[ WARN:0] global /mnt/d/Programs/OpenCV/opencv-4.3.0/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
No capture

以及会出现这个(左上角"Hello OpenCV"的黑幕),没有camera被调用是正常现象,因为WSL无法调用硬件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pjkalEdH-1636711152839)(https://raw.githubusercontent.com/Toyakoyo2018/picBed/master/img/20211112175741.png)]

5.2 测试代码

#include "opencv2/core.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"
#include <iostream>

using namespace cv;
using namespace std;

void drawText(Mat & image);

int main()
{
    cout << "Built with OpenCV " << CV_VERSION << endl;
    Mat image;
    VideoCapture capture;
    capture.open(0);
    if(capture.isOpened())
    {
        cout << "Capture is opened" << endl;
        for(;;)
        {
            capture >> image;
            if(image.empty())
                break;
            drawText(image);
            imshow("Sample", image);
            if(waitKey(10) >= 0)
                break;
        }
    }
    else
    {
        cout << "No capture" << endl;
	for(;;)
	{
            image = Mat::zeros(480, 640, CV_8UC1);
            drawText(image);
            imshow("Sample", image);
            waitKey(0);
	}
    }
    return 0;
}

void drawText(Mat & image)
{
    putText(image, "Hello OpenCV",
            Point(20, 50),
            FONT_HERSHEY_COMPLEX, 1, // font face and scale
            Scalar(255, 255, 255), // white
            1, LINE_AA); // line thickness and type
}

然后进行编译再运行:

$ g++ example.cpp -o opencv_example `pkg-config --cflags --libs opencv`
$ ./opencv_example

输出的图形界面一样,但是文字输出有区别:

Built with OpenCV 3.4.16
No capture
  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值