Ubuntu16.04+opencv3.1.0+python2.7.12提取视频光流特征(1)

1.背景

在使用的数据集中,只给了视频文件,因网络的需求,需要提取视频的光流特征,一路坎坷,终于完成了,记录艰辛历程......

2.准备

(1) opencv3.1.0  

(2)opencv_contrib:   提取光流算法需要该库

           https://github.com/opencv/opencv_contrib      下载对应opencv3.1.0的版本,以备使用

(3)dense-flow:提取光流的算法程序

         https://github.com/yjxiong/dense_flow/tree/opencv-3.1

必须克隆该项目,不能zip下载,否则include中的easylogging++等文件夹会为空,切记!

git clone --recursive http://github.com/yjxiong/dense_flow

克隆完之后,可以查看下easylogging++中是否为空

3.开始编译

因为我已经安装过了opencv3.1.0,因此只需添加opencv_contrib即可,没有安装过的,可以按此博客安装:

https://blog.csdn.net/dwj6336736/article/details/76674748

(1) opencv_contrib

更新源:

 sudo apt-get update  
 sudo apt-get upgrade  

安装编译环境

sudo apt-get install build-essential  

安装依赖项

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

将下载下来的opencv_contrib压缩包解压到opencv3.1.0文件夹下,在opencv3.1.0文件夹下打开终端,进行编译:

mkdir build
cd build
cmake -D WITH_OPENMP=ON -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ..

其中OPENCV_EXTRA_MODULES_PATH=opencv_contrib中的modules文件夹

报错1:cuda版本不对应,要求cuda8.0;但是找到了cuda9.0

因为opencv装了好长时间,后来一直用在anaconda中也没报错,而且中间因为一些其他网络需求更改了cuda版本,导致了现在的问题.

因为我的机子上cuda8.0和cuda9.0共存,因此切换cuda为8.0继续编译,切换方式:

cd /usr/local
stat cuda  # 查看当前链接的cuda版本


# 切换其他的cuda版本
sudo rm -rf cuda # s删除当前软连接
sudo ln -s /usr/local/cuda-8.0 usr/local/cuda    #建立新的软连接

# 注意:使用以上方法,~/.bashrc中的环境变量应为一下方式:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda

编译成功之后显示:

-- Configuring done
-- Generating done
-- Build files have been written to: /home/XXX/opencv-3.1.0/build

之后执行: make -j8

报错2:

Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

一通检索之后,发现了以下解决办法:

说是因为anaconda和ubuntu自身的GCC冲突导致的,解决方案有两个:

1. 编译时增加 -D WITH_OPENMP=ON

尝试之后,无用

2.删除anaconda环境变量

sudo gedit ~/.bashrc

注释掉里面的anaconda环境变量

我将anaconda注释掉之后,依然在编译是加入了1中的方法,编译通过,继续进行

关于删除anaconda环境变量之后anaconda怎么用的问题,参考了一篇博客的说法,在anaconda文件夹下的bin中执行你以前的操作即可

XXX@XXX-System-Product-Name:~/anaconda3$ bin/python
Python 3.5.2 |Anaconda 4.2.0 (64-bit)| (default, Jul  2 2016, 17:53:06) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'3.4.3'
>>> import torch
>>> exit()

报错3:

opencv-3.1.0/opencv_contrib/modules/hdf/include/opencv2/hdf/hdf5.hpp:40:18: fatal error: hdf5.h: 没有那个文件或目录
compilation terminated.
modules/python2/CMakeFiles/opencv_python2.dir/build.make:285: recipe for target 'modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o' failed
make[2]: *** [modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o] Error 1
CMakeFiles/Makefile2:19635: recipe for target 'modules/python2/CMakeFiles/opencv_python2.dir/all' failed
make[1]: *** [modules/python2/CMakeFiles/opencv_python2.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

找不到hdf5.h,一通搜索之后,找到大神的解决方法: https://github.com/opencv/opencv/issues/6016

在opencv3.1.0/modules/python/common.cmake中添加:

find_package(HDF5)
include_directories(${HDF5_INCLUDE_DIRS})

报错4:

 modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/build.make:290: recipe for target 'modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/src/graphcuts.cpp.o' failed
make[2]: *** [modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/src/graphcuts.cpp.o] Error 1

出现与graphcuts.cpp有关的错误,这是因为opencv3.1.0与cuda8.0的时间问题导致的,进入opencv-3.1.0/modules/cudalegacy/src/目录,修改graphcuts.cpp文件,修改以下内容:

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)

为: 

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)

成功之后显示: [100%] Built target opencv_python2

接着在终端执行make install

报错6:

-- Install configuration: "Release"
-- Up-to-date: /usr/local/share/OpenCV/3rdparty/lib/libippicv.a
CMake Error at cmake_install.cmake:36 (file):
  file INSTALL cannot set permissions on
  "/usr/local/share/OpenCV/3rdparty/lib/libippicv.a"
Makefile:116: recipe for target 'install' failed
make: *** [install] Error 1

执行:sudo make install

成功显示:

-- Set runtime path of "/usr/local/bin/opencv_annotation" to "/usr/local/lib"

撒花,撒花,撒花........

然而只完成了二分之一...........

接下来完成dense_flow的编译,链接:https://blog.csdn.net/u014421797/article/details/102764694

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值