iDT算法及后续DTFV编码笔记(ubuntu)
本文主要作为自己学习过程中遇到问题的一些记录,给遇到相同问题的朋友一些参考
环境 ubuntu16.04
代码下载链接
iDT算法
DTFV
iDT算法
环境搭建
官方建议
- OpenCV-2.4.2
- ffmpeg-0.11.1
实际测试
- OpenCV-2.4.9.1
- ffmpeg-2.8.15
我尝试在Windows上安装的过程中遇到很多问题,最终是借用的学校服务器(Ubuntu系统)已经搭建好的OpenCV和ffmpeg环境(如上所示)
具体搭建过程参考
Ubuntu14.04+opencv-2.4.9+ffmpeg-2.4.3
安装好后可先编译Video.cpp进行测试(我这里不用sudo会报错)
sudo g++ Video.cpp -o Test `pkg-config --cflags --libs opencv`
编译后运行Test
./Test ./test_sequences/person01_boxing_d1_uncomp.avi
运行成功后 可看到测试视频每一帧的图片,证明库的安装没有问题,输入make编译即可(虽然还是可能会有BUG),如果自己写了测试程序,make前要把文件夹下测试程序删掉(.cpp文件),不然可能会报错。
编译成功后按照readme的指示测试
./release ./test_sequences/person01_boxing_d1_uncomp.avi
输出一大串数字,就是计算得到的图像特征。(暂时没进行后面的步骤,无法验证数据是不是对的,但程序是跑通了)
遇到的问题
照Readme的说法,只要上述环境搭建好,再配合一些基础库直接make就可以了
但事实是还是得看脸,下面是我自己遇到的一些问题和解决过程
1.输入make指令时报错——lopencv_nonfree和libavdevice缺失(报错如下)
In file included from DenseTrackStab.cpp:1:0:
DenseTrackStab.h:24:39: fatal error: opencv2/nonfree/nonfree.hpp: 没有那个文件或目录
compilation terminated.
=== creating directory: release ===
=== linking: release/DenseTrackStab ===
g++ -L/opt/lib -pipe -Wall -O3 -ggdb -o release/DenseTrackStab -lopencv_core -lopencv_highgui -lopencv_video -lopencv_imgproc -lopencv_calib3d -lopencv_features2d -lopencv_nonfree -lavformat -lavdevice -lavutil -lavcodec -lswscale
/usr/bin/ld: 找不到 -lopencv_nonfree
/usr/bin/ld: 找不到 -lavdevice
collect2: error: ld returned 1 exit status
lopencv_nonfree
看opencv安装目录有没有opencv-nonfre.so
sudo find / -iname "*opencv_nonfree*"
没有的话输入以下代码下载
sudo add-apt-repository --remove ppa:xqms/opencv-nonfree
sudo add-apt-repository --yes ppa:jeff250/opencv
sudo apt-get update
sudo apt-get install libopencv-dev
sudo apt-get install libopencv-nonfree-dev
下载成功后再次查找能看到安装目录下有相应项即可
lavdevice
是ffmpeg的一个lib
解决方案
apt-get install libavdevice-dev
2.使用g++编译指令时报错(报错如下)
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFIsTiled@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFOpen@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFReadEncodedStrip@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFSetField@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFWriteScanline@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFGetField@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFScanlineSize@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFSetWarningHandler@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFSetErrorHandler@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFReadEncodedTile@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFReadRGBATile@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFClose@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFRGBAImageOK@LIBTIFF_4.0’未定义的引用
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFReadRGBAStrip@LIBTIFF_4.0’未定义的引用
collect2: error: ld returned 1 exit status
解决方法
加上sudo解决
可能是部分变量设置在普通用户下于SU下不一样
3.输入make指令时报错——main函数未定义
=== linking: release/DenseTrackStab ===
g++ -L/opt/lib -pipe -Wall -O3 -ggdb -o release/DenseTrackStab -lopencv_core -lopencv_highgui -lopencv_video -lopencv_imgproc -lopencv_calib3d -lopencv_features2d -lopencv_nonfree -lavformat -lavdevice -lavutil -lavcodec -lswscale
运行到上述指令时报错如下
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o:在函数‘_start’中:
(.text+0x20):对‘main’未定义的引用
collect2: error: ld returned 1 exit status
解决方法:
sudo g++ -L/opt/lib -pipe -Wall -O3 -ggdb -o release/DenseTrackStab DenseTrackStab.cpp -lopencv_core -lopencv_highgui -lopencv_video -lopencv_imgproc -lopencv_calib3d -lopencv_features2d -lopencv_nonfree -lavformat -lavdevice -lavutil -lavcodec -lswscale
观察makefile执行过程中的这行代码,缺少编译对象DenseTrackStab(虽然不知道Makefile里的问题在哪),但是指令自己输一遍,把对象加上即可(若报错记得加上sudo)。