Ubuntu16.04下安装OpenCV3.2.0

opencv基本上是搞CV必备套件之一了,支持的语言也非常多,但是安装起来有点麻烦(如果是在conda下安装的话则可以用conda install -c menpo opencv3=3.2.0)。需要注意的是,pip可以安装的opencv-python安装并不依赖opencv,只是封装了opencv的Python API,一般情况下也够用。但是如果准备安装完整版本的opencv,这里比较建议将opencv-python卸载,以免之后产生一些不必要的报错。
通过官方文档和一些博客总结的安装流程大致如下:

1.安装官方给的opencv依赖包

  • GCC 4.4.x or later
  • CMake 2.6 or higher
  • Git
  • GTK+2.x or higher, including headers (libgtk2.0-dev) # 控制opencv GUI
  • 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

    $ 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 # 处理图像所需的包
    $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
    $ sudo apt-get install libxvidcore-dev libx264-dev # 处理视频所需的包
    $ sudo apt-get install libatlas-base-dev gfortran # 优化opencv功能
    $ sudo apt-get install ffmpeg

    ** 注:**其他一些包在之后的cmake的时候缺失的时候会进行安装,如果安装失败可以手动下载相应的包然后放入提示的目录下。而cmake下载tar.gz文件的时候可能不支持,需要进行配置,具体操作可以参考这里

2.下载opencv3.2.0

这里需要下载opencv和opencv_contrib(后者会在cmake配置的时候用到),这是因为opencv3以后SIFT和SURF之类的属性被移到了contrib中,。

$ wget https://github.com/opencv/opencv/archive/3.2.0.zip # 从github上直接下载或者clone也可
$ wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip

3a.配置编译opencv (无NVIDIA CUDA版本)

将上述opencv包解压,然后cmake配置属性

$ cd opencv-3.2.0
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/home/fanzong/anaconda2/envs/tensorflow \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \
    -D PYTHON_EXCUTABLE=/home/fanzong/anaconda2/envs/tensorflow/bin/python \
    -D WITH_TBB=ON \
    -D WITH_V4L=ON \
    -D WITH_QT=ON \    # 1
    -D WITH_GTK=ON \
    -D WITH_OPENGL=ON \
    -D BUILD_EXAMPLES=ON .. # cmake命令的使用方式:cmake [<some optional parameters>] <path to the OpenCV source directory>。如果命令报错的话可以试着把-D后面的空格去掉在执行一次。
$ make -j4
$ sudo make install
$ sudo /bin/bash -c 'echo "/home/fanzong/anaconda2/envs/tensorflow/lib" > /etc/ld.so.conf.d/opencv.conf'
$ sudo ldconfig

PS:1. 如果qt未安装可以删去此行;若因为未正确安装qt导致的Qt5Gui报错,可将build内文件全部删除后重新cmake,具体可以参考这里
CMAKE_INSTALL_PREFIX:安装的python目录前缀,其实就是指定了python模块的安装路径:CMAKE_INSTALL_PREFIX/lib/python2.7/dist-packages。获取该路径的方式可以用python -c "import sys; print sys.prefix"
PYTHON_EXCUTABLE:指定python路径
OPENCV_EXTRA_MODULES_PATH: 指定opencv所需模块的路径,就是之前我们所说的contrib
其他cmake的具体变量说明可以看这里

3.b 配置编译opencv (NVIDIA CUDA版本)

opencv最麻烦的地方就是编译是属性的配置,对于不同的需求要配置不同的属性。当使用NVIDIA GPU GeForce 1080ti的时候:

$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules \
    -D PYTHON_EXCUTABLE=/usr/bin/python \
    -D WITH_CUDA=ON \    # 使用CUDA
    -D WITH_CUBLAS=ON \
    -D DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" \
    -D CUDA_ARCH_BIN="5.3" \    # 这个需要去官网确认使用的GPU所对应的版本[查看这里](https://developer.nvidia.com/cuda-gpus)
    -D CUDA_ARCH_PTX="" \
    -D CUDA_FAST_MATH=ON \    # 计算速度更快但是相对不精确
    -D WITH_TBB=ON \
    -D WITH_V4L=ON \
    -D WITH_QT=ON \    # 如果qt未安装可以删去此行;若因为未正确安装qt导致的Qt5Gui报错,可将build内文件全部删除后重新cmake,具体可以参考[这里](http://stackoverflow.com/questions/17420739/opencv-2-4-5-and-qt5-error-s)
    -D WITH_GTK=ON \
    -D WITH_OPENGL=ON \
    -D BUILD_EXAMPLES=ON ..

3.c 配置编译opencv(NVIDIA Jetson TX2开发板)

目前官方提供的opencv4tegra是2.4版本的,尚不支持3.2版本,所以需要自己编译。

$ cmake -D WITH_CUDA=ON \
    -D CUDA_ARCH_BIN="6.2" \  # 安装了6.2版本
    -D CUDA_ARCH_PTX=""  \
    -D WITH_OPENGL=ON  \
    -D WITH_LIBV4L=ON \
    -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local ..

PS:不需要安装contrib包,否则之后调用摄像头调整分辨率的时候会失败。具体安装细节可以参考这里
编译成功时应该看到这些:

  1. CUDA8.0

    --   Other third-party libraries:
    --     Use Cuda:                    YES (ver 8.0)
    --   NVIDIA CUDA
    --     Use CUFFT:                   YES
    --     Use CUBLAS:                  NO
    --     USE NVCUVID:                 NO
    --     NVIDIA GPU arch:             53
    --     NVIDIA PTX archs:
    --     Use fast math:               NO
  2. OpenGL

    --   GUI: 
    --     GTK+ 2.x:                    YES (ver 2.24.30)
    --     OpenGL support:              YES (/usr/lib/aarch64-linux-gnu/libGLU.so /usr/lib/aarch64-linux-gnu/libGL.so)
  3. VideoIO

    --   Video I/O:
    --     DC1394 2.x:                  YES (ver 2.2.0)
    --     FFMPEG:                      YES
    --       codec:                     YES (ver 54.92.100)
    --       format:                    YES (ver 54.63.104)
    --       util:                      YES (ver 52.18.100)
    --       swscale:                   YES (ver 2.2.100)
    --       gentoo-style:              YES
    --     GStreamer:
    --       base:                      NO
    --       video:                     NO
    --       app:                       NO
    --       riff:                      NO
    --       pbutils:                   NO
    --     V4L/V4L2:                    Using libv4l (ver 1.0.0)

    注:GPU版本安装的时候很容易出错,这里说的出错并不是编译报错,而是在python中调用的时候报错,比如cv2.VideoCapture(0)返回false,cv2.imshow()的时候报unspecified error。在调用cv2的时候报错一般都是在cmake配置编译的时候由于配置错误导致的,所以需要确认配置的参数是否能够覆盖到你所需的范围。
    关于GPU版本的安装也可以参考下这里,写得更加详细清楚。

4.完成安装并测试

安装完成以后,重启下机器。编译之后应该会在CMAKE_INSTALL_PREFIX/lib/python2.7/dist-packages/目录下找到cv2.so。打开python console,检测opencv版本python -c "import cv2; print cv2.__version__"。如果正确安装的话则会输出3.2.0。

参考

http://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/
http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html
http://stackoverflow.com/questions/31040746/cant-open-video-using-opencv
http://dev.t7.ai/jetson/opencv/
https://developer.nvidia.com/cuda-gpus
http://stackoverflow.com/questions/41818870/python-opencv-imshow-error
http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_setup/py_setup_in_fedora/py_setup_in_fedora.html


Installing OpenCV 3.1 on Jetson TX1

Uninstall OpenCV4Tegra

Reference here

Uninstall OpenCV for Tegra packages, purge local repositories, and update the apt cache using the following commands:

sudo apt-get purge libopencv4tegra-dev libopencv4tegra
sudo apt-get purge libopencv4tegra-repo
sudo apt-get update

Installing OpenCV 3.1

required packages

Base requirements

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

GStreamer support (recommended)

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

Python support

sudo apt-get install python2.7-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

OpenGL support

sudo apt-get install libgtkglext1 libgtkglext1-dev
sudo apt-get install qtbase5-dev

video4linux2 support (better handling of usb cameras modes)

sudo apt-get install libv4l-dev v4l-utils qv4l2 v4l2ucp

download sources

  • Download from latest sources. You may want this option as it contains a compatibility fix to allow CUDA 8.0.
git clone https://github.com/opencv/opencv.git
curl -L https://github.com/opencv/opencv/archive/3.2.0.zip -o opencv-3.2.0.zip
unzip opencv-3.2.0.zip
cd opencv-3.2.0

compiling

This is a list of usefull cmake params to add some extra features to your OpenCV compilation to get things working on your TX1.

required

  • CMAKE_BUILD_TYPE=RELEASE compiles the release version of OpenCV
  • CMAKE_INSTALL_PREFIX=/usr/local path where OpenCV will be installed
  • WITH_CUDA=ON
  • CUDA_ARCH_BIN="5.3" check latest version in CUDA GPUs reference
  • CUDA_ARCH_PTX=""

optional

  • WITH_OPENGL=ON OpenGL compatibility, requires GTK+ OpenGL Extensions the QT backend. When this guide was write, compilation faild for the combination CUDA 8.0 + OpenGL support.
  • WITH_LIBV4L=ON will use video4linux2 libraries
  • CUDA_FAST_MATH=ON Mathematical operations will run faster but less precise. See intrinsic mathematical functions
  • ENABLE_PRECOMPILED_HEADERS=OFF your TX1 does not have enough disk space for pre-compiling everything but you can trade space required by compilation time with this flag. Other options is to cross compile from a desktop pc or to download & compile from an external device, an USB 3.0 external drive will do the work and is fast enough.
  • ENABLE_NEON=ON ref
  • BUILD_TESTS=OFF disable tests
  • BUILD_PERF_TESTS=OFF disable performance tests
  • BUILD_EXAMPLES=OFF disable examples
mkdir release
cd release
cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D CUDA_ARCH_PTX="" -D WITH_OPENGL=ON -D WITH_LIBV4L=ON -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

After running the cmake command everything is ready to be compiled, it worth to check that you got the following outputs on the cmake summary:

TX1 platform

--   Platform:
--     Host:                        Linux 3.10.96-tegra aarch64
--     Configuration:               RELEASE

CUDA 8.0

--   Other third-party libraries:
--     Use Cuda:                    YES (ver 8.0)
--   NVIDIA CUDA
--     Use CUFFT:                   YES
--     Use CUBLAS:                  NO
--     USE NVCUVID:                 NO
--     NVIDIA GPU arch:             53
--     NVIDIA PTX archs:
--     Use fast math:               NO

OpenGL

--   GUI: 
--     GTK+ 2.x:                    YES (ver 2.24.30)
--     OpenGL support:              YES (/usr/lib/aarch64-linux-gnu/libGLU.so /usr/lib/aarch64-linux-gnu/libGL.so)

If you enabled video4linux2

--   Video I/O:
--     V4L/V4L2:                    Using libv4l1 (ver 1.10.0) / libv4l2 (ver 1.10.0)

If you enabled GStreamer

--   Video I/O:
--     GStreamer:                   
--       base:                      YES (ver 1.8.2)
--       video:                     YES (ver 1.8.2)
--       app:                       YES (ver 1.8.2)
--       riff:                      YES (ver 1.8.2)
--       pbutils:                   YES (ver 1.8.2)

installing

Now that all dependencies are ready, is time to compile

make -j4 # ... because you want to use all your fancy TX1 cores isn't it? ;)
sudo make install

Other Resources

Extra parameters used for TX1 here

Official OpenCV install guide here

video4linux2 useful commands

This command changes camera mode to full hd resolution

v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1
v4l2-ctl --set-parm=30
v4l2-ctl -V

Python script to test change of resolution

import cv2

vc = cv2.VideoCapture(0)
print "capture stream open"

if not vc.isOpened():
    print "unable to capture camera"
    exit(-1)

print "resolution is %dx%d" % (vc.get(cv2.CAP_PROP_FRAME_WIDTH), vc.get(cv2.CAP_PROP_FRAME_HEIGHT))
print "attempt to switch to full hd"
vc.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
vc.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
print "resolution is %dx%d" % (vc.get(cv2.CAP_PROP_FRAME_WIDTH), vc.get(cv2.CAP_PROP_FRAME_HEIGHT))

_, frame = vc.read()
print "frame captured"
cv2.imwrite("frame.png", frame)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值