【超详细】WSL (Ubuntu 18.04 LTS) 安装OpenCV

WSL (Windows Subsystem for Linux) 非常好用,但是如何在里面安装OpenCV并成功调用呢?这篇博客会详细告诉你。
摘要由CSDN通过智能技术生成

WSL (Windows Subsystem for Linux) 非常好用,但是如何在里面安装OpenCV并成功调用呢?这篇博客会详细告诉你。

WSL (Ubuntu 18.04 LTS) 安装OpenCV

1. 安装WSL(若没有安装)

可以根据这篇教程安装,提醒下如果是国内用户最好换一下镜像源,更新和安装速度更快,该教程也有讲到:https://blog.csdn.net/kidcad/article/details/99445957?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1.nonecase

因为现在Ubuntu已经更新到20.04 LTS focal版本了,Windows Store里面默认安装的Ubuntu是最新版也即20.04 LTS版本,如果想要安装以前的版本,那么就可以安装带版本号的版本,如下图的Ubuntu 18.04 LTS。

这是我目前的WSL版本:

顺便推荐用Windows Store里面的Terminal,很好看很好用,我目前用的就是这个。然后可以根据这个教程,把Windows Terminal添加都右键菜单,并cd到指定位置:https://blog.csdn.net/Jioho_chen/article/details/101159291

2. 安装编译依赖环境

2.1 安装cmake

首先需要安装cmake,可以直接用apt-get进行安装,但是版本较低,也可以用源码进行编译安装,版本比较高,但是比较麻烦,低版本也是可以的,记住在CMakeLists.txt里面改CmakeVersion就行了。需要高版本可以参考这两个链接:https://www.jianshu.com/p/379f89355dc4https://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

如果你没有安装git,可以安装一下,下载OpenCV可以用git clone.

sudo apt-get install git

3. 下载与安装OpenCV

3.1 下载OpenCV

下载地址:https://opencv.org/releases/,里面列出了不同版本以及不同来源的OPenCV,可以下载Sources或者github进行clone.

如果直接下载,下载完压缩包后解压到你想保存的位置。

如果用git clone,那么进入你要保存的位置并clone:

git clone https://github.com/opencv/opencv.git

这样clone的版本默认是最新的,也即4.3.0,如果你想要更改版本,可以 git checkout <opencv-version> 更改版本。

3.2 编译安装OpenCV

首先需要再你解压或者clone的目录里面创建一个 build 文件夹,然后进入该文件夹:

mkdir build && cd build

我的电脑情况如下:在这里插入图片描述
进行cmake

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

cmake很容易失败,查看失败原因大多是因为依赖环境没有安装成功,很有可能是国内网络环境问题,检查一下你的Ubuntu源有没有更改为国内的镜像源,或者再次重新安装对应依赖。cmake成功后的结果大致是这样的(自己当时没有截图,图片来自https://linuxize.com/post/how-to-install-opencv-on-ubuntu-18-04/)

在这里插入图片描述
cmake结束后进行make编译

sudo make -j8

完成后再进行安装

sudo make install

3.3 配置环境

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.4 检验安装

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

def@DESKTOP-7MMULM3:~$ pkg-config --modversion opencv4
4.3.0
def@DESKTOP-7MMULM3:~$ pkg-config --modversion opencv
3.2.0

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

4. 安装Xserver,用于WSL的图形化显示

如果要在WSL上面运行图像化程序,需要安装一个Xserver,可以安装VcXsrv,链接:https://sourceforge.net/projects/vcxsrv/

安装完成后,需要在WSL里面config一下:

sudo vim ~/.bashrc

在末尾添加以下内容

export DISPLAY=:0.0

完成后ESC再输入:wq保存退出,然后记住souce

source ~/.bashrc

在Windows下面运行XLanuch,将 Display Number 改为0

image-20200612160041639
Native OpenGL 取消掉

其他就一路默认然后结束

5. 程序测试

5.1 OpenCV自带测试程序

在你的OpenCV安装包里面有样例代码,可以用于测试,比如这个路径:/opencv-4.3.0/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无法调用硬件。

如果没有该程序,可以直接复制以下代码:

#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.2.0
No capture

不是特别明白差异原因,猜测是因为CMakeLists里面指定用opencv4进行编译,但是我看了一下没有发现,也不想去深究了。

5.2 例程2,打印图片

代码如下:

// opencv_demo.cpp
#include <opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
cout << "OpenCV Version: " << CV_VERSION << endl;
Mat img = imread("Pokemon.png");
imshow("1440", img);
waitKey(0);
return 0;
}

我用这张图片进行测试,把它放在程序并行的文件夹下,命名为 Pokemon.png.
测试图片,自行保存Pokemon.png
进行编译并运行:

$ g++ opencv_demo.cpp -o opencv_demo `pkg-config --cflags --libs opencv4`
$ ./opencv_example

输出如下:

6. 参考

本文的OPenCV部分参考了这两篇博客:https://blog.csdn.net/
public669/article/details/99044895
https://linuxize.com/post/how-to-install-opencv-on-ubuntu-18-04/.

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值