java测试opencv是否成功_bash


RoboMaster视觉教程OpenCV(一)环境安装及代码测试

本系列是三丰在做RoboMaster比赛视觉组学习过程中的总结。

决定开始从OpenCV写起,因为大家的代码其实写的大部分是利用C++调用OpenCV库来进行图像处理。而这一系列笔记都是基于Linux系统,为什么不用windows?因为Linux配置环境真的太方便了,安装一个eigen库只需要一行指令,而Windows却要配好久的环境。因此在这里我也建议大家,不管是在学习过程中,还是实际编写代码的过程中,都用Linux系统就好。在windows上即便配置好环境,也没有什么大的作用。因为你最终还是要把这些代码移植到Linux的硬件平台上。

一 为什么要编译OpenCV二 Linux双系统三 安装中文输入法(可选,怎么方便怎么来)四 编译OpenCV和ffmpeg五 构建步骤5.1 换源5.2 安装必要的依赖5.3 构建ffmpeg5.4 构建OpenCV六 运行代码测试

一 为什么要编译OpenCV

因为根据源码构建OpenCV的能力是我们必须要掌握的,除了笔记本上自己安装的Ubuntu系统没有OpenCV之外,我们也有可能在自己的硬件平台上编译。拿manifold来说,系统其实自带OpenCV(使用dpkg -l命令可以看到所有已经安装了的库),那么为什么还要自己编译呢?因为manifold虽然安装了CUDA库(利用GPU进行图像处理)。但自带的OpenCVcv却没有添加CUDA功能(如果以后有人要写CUDA版本的RM程序,记得大幅修改,因为CUDAOpenCV cv里的类是单独的,另一个名字)。因此,我们需要自己编OpenCV ,DIY能够满足我们要求的OpenCV库。

二 Linux双系统

大家在比赛中所用的硬件平台有manifold、NUC等等,这些东西是学校的物品,而且每一个都特别贵,当然不可能人人都有。但为了学习呢,我们可以在笔记本上安装Linux双系统。

这个链接炒鸡详细:详细Linux双系统安装教程有不懂的地方,比如(分配空间,在网上多搜索几个文章,对照看就可以)

请一定要设置系统语言是英文,也就是说命令行桌面叫Desktop,而不是桌面。否则运行代码会有很多bug!!!!!!

三 安装中文输入法(可选,怎么方便怎么来)

个人认为在浏览器搜索,写中文注释等的时候,中文输入法还是很有必要的。

四 编译OpenCV和ffmpeg

这次我们安装三个库,ffmpeg4.2.2、OpenCV3.4.8和OpenCV-contrib3.4.8。

ffmpeg,对视频进行编码解码,不装这个库,OpenCV打不开很多视频文件格式,大家自己可以去ffmpeg官网下载最新版本的ffmpeg。下载选项也有很多(如已经构建好的Static版本,需要自己编译的源代码),大家记得下载源码(Source Code)。


java测试opencv是否成功_bash_02


OpenCV分为两个库,一个是OpenCV,放了OpenCV稳定的功能,另一个是OpenCV-contrib,将一些不太稳定的功能放进去了,contrib介绍。比如Tracking()函数,我们以后也会遇到,所以这里干脆一次性安装全乎了。 OpenCV github下载链接 OpenCV-contrib下载地址

这俩链接下载速度贼慢,不过已经比官网快许多了。这一节用到的所有资源大家也可以在公众号后台回复 day1获取。

我在这里下载了OpenCV 3.4.8(3.4.1是企业版应用最稳定的,不过这种稳定我们不一定用得到。所以大家自己选择喜欢的版本即可,步骤大同小异)

另外还要唠叨几句,所有在命令行的指令都可以写成一个sh格式的脚本,这样大家只需要一个指令便可以完成所有的安装步骤。但是一旦在使用其他版本安装包的时候便需要修改内容,不具有普适性。因此整个过程大家还是应该要掌握。此外OpenCV cv库的安装使用的是cmake。使用cmake-gui这个图形化的工具更加方便。

五 构建步骤

5.1 换源

  1. 修改sourses.list 这一步的操作本质是更改sourses.list这个文件里面下载软件包的网址
1.  cd /etc/apt
sudo gedit sources.list
//这个地方要在文件里修改网址
sudo apt clean
sudo apt update
sudo apt upgrade
  1. 在输入sudo gedit sources.list后,会打开这个sources.list文件,把cn.archive.ubuntu(其他人的电脑可能是id.archive.ubuntu或者是ports.ubuntu)换成mirrors.aliyun
    例如:deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
    不要直接粘贴复制。因为有的是http,有的是https,不要随意更改。保证// 与第一个/之间是http://mirrors.aliyun.com即可

正常情况下,上面的指令可以很方便地执行,但是也有可能出错。出的错有太多种可能。大家如果有错直接百度,以后会写一个关于换源的总结。

5.2 安装必要的依赖

直接在命令行输入以下命令


sudo apt-get install build-essential 
 sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev -y
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev -y
sudo apt-get install cmake-gui


解析:

build-essential

作用是提供编译程序必须软件包的列表信息,没有可能在运行程序时出错,以防万一安装上,很多软件安装都需要这一步

cmake

构建代码常用的工具,用命令行构建。也可以从cmake官网下载最新版本

cmake-gui

构建代码常用的工具,用图形界面构建。

git

版本控制的东西。可以从版本库直接下OpenCV cv代码libgtk2.0-dev

调试界面,(我们以后会用qt做界面,不用这个,但这里安装上)pkg-config

用于获得某一个库/模块的所有编译相关的信息,链接库用的。我们后面用gcc编译时用到它,用qt包含OpenCV库时也用到它。很重要。

libavcodec-dev libavformat-dev libswscale-dev

ffmpeg需要的库

python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
这里安装了一些Python之类的库

sudo apt-get install 库 -y -y在这里的意思是遇到yes和no的选择,直接yes,就不需要再次输入了

5.3 构建ffmpeg

  1. 去这个网站下载yasm1.3.0
    将ffmpeg-4.2.2.tar.bz2和yasm-1.3.0.tar.gz压缩包放到Downloads文件夹里
  2. 那么,以下命令是在这个Downloads文件夹里的命令(以下命令已经写到脚本ffmpeg.sh中,如果不想输入以下命令,在Downloads文件夹下直接输入命令:sudo ./ffmpeg.sh 一个脚本便可以运行下面所有命令)
tar -xjvf ffmpeg-4.2.2.tar.bz2
tar -xvzf yasm-1.3.0.tar.gz
ls
cd yasm-1.3.0/
./configure
make -j8
make install
cd ../ffmpeg-4.2.2
./configure --disable-cuda-nvcc --disable-opengl --enable-shared --enable-nonfree 
make -j8
sudo make install


所有库安装的过程中,编译也就是make是最耗费时间的。所以需要多线程编译。make -j8 j后面的数即为多少线程一起编译,这个数应该是多少呢?是CPU核的两倍,如果电脑四个CPU核就是8。比如某个人电脑配置Intel® Core™ i5-6300HQ CPU @ 2.30GHz × 4
2.30GHz X 4,代表4个核
所以make -j8是恰当的

  1. 配置ffmpeg环境变量(这一步可以等OpenCV构建完毕后,再执行)
sudo gedit /etc/ld.so.conf 
 //在文件最后一行添加上: include /usr/local/lib
 //保存退出
 sudo ldconfig
sudo gedit /etc/bash.bashrc
//在文件最后添加两行:
//倒数第二行 PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
//倒数第一行 export PKG_CONFIG_PATH
source /etc/bash.bashrc

  1. 环境变量配置参考
  2. 最后,不区分目录,直接在命令行里打出ffmpeg,应该出现以下信息


java测试opencv是否成功_bash_03


ffmpeg安装参考教程,报错点击它

5.4 构建OpenCV


将3.4.8contrib和之前的3.4.8文件夹放到Download
在OpenCV-3.4.8目录下:
mkdir build
cd build
cmake-gui


  1. 然后会弹出CMake的图形化界面,第一个路径选择Downloads/OpenCV-3.4.8,第二个路径选择刚才建的build文件夹 Downloads/OpenCV-3.4.8/build


java测试opencv是否成功_OpenCV_04


  1. 点击左下方的Configure按钮,选择Unix Makefiles,选择Use default native compilers(默认),然后点击Finish
    等待。配置的过程中,由于有墙,类似ippicv之类的库,可能无法下载以至于报错。可以选择删除build文件夹重新试一下。或者去github下载相关源码(ippic)进行配置,耐心等待,应该不至于无法下载。
  2. 出现红框后,需要进行选择。
    在OpenCV_EXTRA_MODULES_PATH处,选择输入目录(单击这一行后方空白处即可选中), 然后选择OpenCV_contrib-3.4.8文件夹中的modules文件夹。
  3. 选中“BUILD_OpenCV_world”选项旁边的复选框。
  4. 再次点击configure
  5. 点击generate,cake-gui的使命结束了
  6. 在build文件夹下
sudo make -j8
sudo make install


  1. 配置环境变量(ffmpeg如果做过,我们已经将usr/local/lib添加到了ld.so.conf这个管理.so库路径的文件中,所以现在只需要更新一下: sudo ldconfig source /etc/bash.bashrc)

以上步骤完成后,我们就可以再次快乐的使用一个模块更加丰富OpenCV cv了。

cmake-gui安OpenCV cv参考阅读:

六 运行代码测试

建新文件夹,我命名为OpenCV-Test

进入文件夹后右键打开终端

touch main.cpp 创建名为main.cpp的文件

右键main.cpp,使用IDE打开

复制代码:


#include <OpenCV2/OpenCV.hpp> 
#include <iostream> 

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
 //读取照片
 Mat image = imread("OpenCV_Logo.png");

 //检测失误
 if (image.empty()) 
 {
  cout << "Could notOpenCV or find the image" << endl;
  cin.get(); //等待键盘输入
  return -1;
 }

 String windowName = "OpenCV Test";       //窗口名称
 namedWindow(windowName);            //创建新窗口
 imshow(windowName, image);           //使用新窗口显示照片
 waitKey(0);                    //等待键盘输入
 destroyWindow(windowName);           //关闭所有窗口
 return 0;
}


OpenCV_Logo.png图片,放入与main.cpp相同的文件夹中。(OpenCV_Logo.png图片 在day1网盘中有。)

终端命令行执行:


g++ -o main main.cpp `pkg-config --libs --cflags OpenCV`
./main


出现一张图片,说明运行成功。(注意, pkg-config --libs --cflags OpenCV旁边不是单引号,而是键盘数字1旁边的点)