iDT算法及后续DTFV编码笔记(对main函数未定义的引用解决)


本文主要作为自己学习过程中遇到问题的一些记录,给遇到相同问题的朋友一些参考
环境 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)。

DTFV(后续更新)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值