ubuntu16.04+opencv2.4使用dense_flow提取光流图像

引用https://www.cnblogs.com/empty16/p/5828331.html

使用dense_flow求取图像的光流图像,原项目地址: https://github.com/wanglimin/dense_flow

该方法使用的是opecnv最基本的光流图像计算方法,输出为 flow_x 和flow_y 两个图像。

因为输入同程序要求不同(视频 -> 连续帧图像),因此对程序进行部分修改,大体相同。

对该程序的编译方法为:

假设程序的目录为:$ROOT_DENSE

在对该程序进行编译之前应该首先在CMakelist里面修改要进行编译的源文件。

将第5, 6行修改为:

1

2

add_executable( denseFlow denseFlow.cpp )

target_link_libraries( denseFlow ${OpenCV_LIBS} )

3.add_executable( denseFlow_gpu denseFlow_gpu.cpp )
4.target_link_libraries( denseFlow_gpu ${OpenCV_LIBS} )

 接下来对程序进行编译:

1

2

3

4

5

cd $ROOT_DENSE

mkdir build

cd build

cmake ..

make

 

Usage:This is a sample code for extrating dense flow field given a video.
在build目录下
./denseFlow_gpu -f test.avi -x tmp/flow_x -y tmp/flow_x -i tmp/image -b 20 -t 1 -d 0 -s 1
test.avi: input video
tmp: folder containing RGB images and optical flow images#一个存放输出的文件夹

 注: 在使用该方法时,需要使用opecnv2.4.X版本,推荐使用2.4.10版本,如果已经安装opencv更高版本,如3.0,需要对其进行修改。

(因3.0中有bug,所以在处理图像数据过程中可能会出现问题),bug分析见:http://stackoverflow.com/questions/31996367/opencv-resize-fails-on-large-image-with-error-215-ssize-area-0-in-funct

当需要进行resize的图像长度大于2^31时,ssize.area()返回值为负值。因此需要注释掉下面语句:

1

CV_Assert( ssize.area() > 0 )

 

对于图像的高度height 大于宽度width 的图像,需要对该语句进行注释:

1

CV_Assert( dsize.area() > 0 )

遇到错误

1.在使用该方法时,需要使用opecnv2.4.X版本

/usr/bin/ld: 找不到 -lopencv_dep_cudart

解决:用cmake -D CUDA_USE_STATIC_CUDA_RUNTIME=OFF ..代替cmake ..

2.有多个不同版本的opencv时,设置opencv路径

在project(  )前输入

set( OpenCV_DIR /home/shajie/temporal-segment-networks/3rd-party/opencv-2.4.13/build )

set( OpenCV_FOUND 1 )#当opencv设置为off时需要打开

3.在denseFlow.cpp添加

#include

using namespace std;

如果在项目开发中需要使用不同版本的opencv,那么对不同版本opencv管理方法见:Ubuntu下多个版本OpenCV管理(Multiple Opencv version)

使用:在终端输入:

 

./extract_gpu -f test.avi -x tmp/flow_x -y tmp/flow_y -i tmp/image -b 20 -t 1 -d 0 -s 1 -o dir
  • test.avi: input video or iamge sequeence
  • tmp: folder containing RGB images and optical flow images
  • dir: output generated images to folder. if set to zip, will write images to zip files instead.

例:sudo ./denseFlow111 -f /home/shajie/image/HandAction/a1_p1_r1 -x /home/shajie/image/11/flow_x -y /home/shajie/image/11/flow_y -i /home/shajie/image/11/image -b 20 -t 1 -d 0 -s 1 -o /home/shajie/image/11

 

 

你可能感兴趣的:(光流提取)