Site Overlay

从零开始的 OpenCV 环境搭建

下载并安装 Virtual Box(下简称 VBox)

https://download.virtualbox.org/virtualbox/6.0.14/VirtualBox-6.0.14-133895-Win.exe

我的环境是Microsoft Windows [版本 10.0.18362.418],不想装双系统,但 Windows 也不能替代,所以需要用虚拟机。

具体的安装过程这里略去。

下载并导入 Ubuntu 的 VDI 镜像

从这里下载 vdi 镜像。我选择的是:Ubuntu 19.10 Eoan Ermine (Beta) 这个版本,可以自由选择,不必拘泥。

https://www.osboxes.org/ubuntu/

下载下来是 .7z 格式,解压压缩包唯一的那个 .vdi 文件,放在任意位置。

打开 VBox,点主界面右上方【新建】,在新建窗口中,切换到专家模式,如下图进行设置。

1571372554051

之后直接启动,我们就会进入 Ubuntu 系统。

进入登录界面,密码是 osboxes.org

安装增强功能

点击虚拟机菜单【设备】【安装增强功能】,稍微等待之后,Ubuntu 会弹出一个对话框,询问你是否运行。选【Run】。很快就会安装完毕。

上述内容的更详细介绍,见 https://www.osboxes.org/guide/

从官网我们可以知道需要下列功能包:

Required Packages

  • GCC 4.4.x or later
  • CMake 2.8.7 or higher
  • Git
  • GTK+2.x or higher, including headers (libgtk2.0-dev)
  • pkg-config
  • Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)
  • ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
  • [optional] libtbb2 libtbb-dev
  • [optional] libdc1394 2.x
  • [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
  • [optional] CUDA Toolkit 6.5 or higher

设置共享剪贴板

在虚拟机菜单,选择【设备】【共享剪贴板】【双向】,以便我们直接粘贴命令。

在 Ubuntu 中,按下 Ctrl+Alt+T 打开终端,先执行

$ sudo reboot

重启之后,共享剪贴板生效。

配置软件源

为了安装包时保证速度,我们需要配置软件源为国内源。

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
$ sudo gedit /etc/apt/sources.list

按下 Ctrl+H,替换

http://security.ubuntu.com/ubuntu
和
http://us.archive.ubuntu.com/ubuntu/

http://mirrors.aliyun.com/ubuntu/

Ctrl+S 保存并关闭。别忘了:

$ sudo apt-get update

这时我遇到报错:

Host system reported disk full. VM execution is suspended. You can resume after freeing some space.

emmm,我的 1TB 的硬盘满了,大家不要在意。删了些文件就好了。

安装基本工具

sudo apt install git vim net-tools

正式安装 OpenCV 所需工具

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 libjasper-dev libdc1394-22-dev

我这里遇到了错误:

E: Unable to locate package libjasper-dev

执行下列命令即可解决

echo "deb deb http://us.archive.ubuntu.com/ubuntu/ yakkety universe" | sudo tee -a /etc/apt/sources.list
sudo apt-get update
sudo apt-get install libjasper-dev

然后执行下列命令:(如果下载太慢,试试这个:https://liquidtelecom.dl.sourceforge.net/project/opencvlibrary/4.1.2/OpenCV%204.1.2.tar.gz)

$ mkdir -p ~/cvlearn/opencv
$ cd $_
$ sudo apt install axel
$ axel https://github.com/opencv/opencv/archive/4.1.2.tar.gz
$ tar -zxvf 4.1.2.tar.gz
$ cd opencv-4.1.2
$ mkdir build
$ cd build
$ cmake ..
$ make -j4
$ make install

这边可以参考:https://github.com/yoyoyo-yo/Gasyori100knock/blob/master/Tutorial/README_opencv_c_install.md

然后不出意料我们卡在了“-- IPPICV: Download: ippicv_2019_lnx_intel64_general_20180723.tgz”

参考这篇文章的做法:https://yinguobing.com/install-ippcv-manually/
直接从这个地址下载:https://raw.githubusercontent.com/opencv/opencv_3rdparty/a62e20676a60ee0ad6581e217fe7e4bada3b95db/ippicv/ippicv_2017u2_lnx_intel64_20170418.tgz

然后放到 ~/Downloads(安装增强功能,启用拖放之后,直接从 Windows 拖过去就行)

vi 3rdparty/ippicv/ippicv.cmake
找到:"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
改为:
"file://~/Downloads/"
<Esc> :wq

重新 cmake ..即可。

$ cmake ..
$ make -j4
$ sudo make install

然后试着运行样本程序:

以下をsample.cppとして保存

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>

int main(int argc, const char* argv[]){
  cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));
  cv::namedWindow("red", cv::WINDOW_AUTOSIZE);

  cv::imshow("red", redImg);
  cv::waitKey(0);

  cv::destroyAllWindows();

  return 0;
}

次にコンパイル

$ g++ sample.cpp -o sample -lopencv_core -lopencv_imgcodecs -lopencv_highgui
これで、コンパイルが通れば、フォルダ内に sample というものができてます。 あとは実行しましょう。

$ ./sample
んでこんなウィンドウが出たら成功です!!

次に画像処理の基本操作を説明していきます。(もう知ってるという人はスキップして、問題に進んでください!)

然而我编译失败:

fatal error: opencv2/core.hpp: No such file or directory

这显然找不到头文件,我参考了这篇文章:

  1. https://blog.csdn.net/sun172270102/article/details/50449241
  2. https://stackoverflow.com/questions/2497344/what-is-the-environment-variable-for-gcc-g-to-look-for-h-files-during-compila

于是我在 shell 设置了 CPLUS_INCLUDE_PATH=/usr/local/include/opencv4/,但是没起作用,然后我参考了这篇文章:

执行

export CPLUS_INCLUDE_PATH=/usr/local/include/opencv4/

再编译,成功。那么:

vi ~/.bashrc
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/include/opencv4/
<ESC> :wq

以后就不用担心了。

编译之后遇到 warning:
/usr/bin/ld: warning: libopencv_core.so.4.1, needed by /usr/local/lib/libopencv_highgui.so, may conflict with libopencv_core.so.3.2 目前没发现问题,先不管了。

然而运行报错: Segment fault (core dumped).
于是参考:https://stackoverflow.com/questions/44391324/linux-compilation-conflicting-libraries
运行:g++ sample.cpp -o sample -lopencv_core -lopencv_imgcodecs -lopencv_highgui -L /usr/local/lib/
这次报错不同了:

terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.1.2) /home/osboxes/cvlearn/opencv-opencv-59f0319/modules/highgui/src/window.cpp:634: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvNamedWindow'

Aborted (core dumped)

好,

sudo apt install libgtk2.0-dev pkg-config

重新编译是吗??

[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make install -j12

好,成功。

不过还有点小问题:
Gtk-Message: 10:23:36.915: Failed to load module "canberra-gtk-module"
虽然不影响进行,但着实令人不爽,解决方法:

sudo apt-get install libcanberra-gtk-module

终于完成了。(大哭

发表评论

电子邮件地址不会被公开。 必填项已用*标注