ubuntu server10.04下安装opencv2.0+ffmpeg-0.7-rc1



ubuntu server10.04下安装opencv2.0+ffmpeg-0.7-rc1 .

系统为ubuntu sever10.04  32位。

(里面遇到的问题都是我个人在配置时遇到的问题,都一一搜资料解决了。哎,折腾)

 

一、安装ffmpeg:

 

本文提到的安装方式基本都是采用源代码编译的方式,非RPM包安装,请读者注意。
FFmpeg软件只是个解码编码软件,如果支持多种格式必须先安装好对应的库,下面就说下我装的库:

0.    安装yasm:

http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz

# ./configure
# make
# make install

1. 安装faad2

# wget http://downloads.sourceforge.net/faac/faad2-2.7.tar.gz
# tar xvfz faad2-2.7.tar.gz
# cd faad2
# ./configure
# make
# make install

2. 安装liba52

# wget http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz
# tar xvfz a52dec-0.7.4.tar.gz
# cd a52dec-0.7.4
# ./configure
# make
# make install

3. 安装libdirac

# wget http://downloads.sourceforge.net/dirac/dirac-0.10.0.tar.gz
# tar xvfz dirac-0.10.0.tar.gz
# cd dirac-0.10.0
# ./configure
# make
# make install

4. 安装faac2

# wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
# tar xvfz faac-1.28.tar.gz
# cd faac
# ./configure
# make
# make install

如果出错:

解压后,修改一个文件:

1.  vi +123 ./common/mp4v2/mpeg4ip.h

从123行开始修改此文件mpeg4ip.h,到129行结束。

[html] view plaincopyprint?

1.  修改前:

2.

3.  #ifdef __cplusplus

4.

5.  extern ”C” {

6.

7.  #endif

8.

9.  char *strcasestr(const char *haystack, const char *needle);

10.

11. #ifdef __cplusplus

12.

13. }

14.

15. #endif

16.

17. 修改后:

18.

19. #ifdef __cplusplus

20.

21. extern ”C++” {

22.

23. #endif

24.

25. const char *strcasestr(const char *haystack, const char *needle);

26.

27. #ifdef __cplusplus

28.

29. }

30.

31. #endif

5. 安装libamrnb

# wget http://ftp.penguin.cz/pub/users/utx/amr/amrnb-7.0.0.2.tar.bz2
# tar xvfj amrnb-7.0.0.2.tar.bz2
# cd amrnb-7.0.0.2
# ./configure
# make
# make install

6. 安装libamrwb

# wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-7.0.0.3.tar.bz2
# tar xvfj amrwb-7.0.0.3.tar.bz2
# cd amrwb-7.0.0.3
# ./configure
# make
# make install

7. 安装libmp3lame

# wget http://downloads.sourceforge.net/lame/lame-3.97.tar.gz
# tar xzf lame-3.97.tar.gz
# cd lame-3.97
# ./configure
# make
# make install

8.安装libtool:

#apt-get install libtool

9. 安装libx264
http://download.videolan.org/pub/videolan/x264/snapshots/下载:

x264-snapshot-20091225-2245.tar.bz2

解压之后,安装libx264

# cd x264
# ./configure –enable-pthread –enable-shared –disable-asm
# make
# make install

10. 安装libnut,该软件需要用svn获取源代码,svn可以直接用yum install svn来装。先下载:

http://www.findthatzip-file.com/search-42083779-hZIP/winrar-winzip-download-libnut-661.tar.bz2.htm

下载后代码保存在新建立的libnut目录下,对于64位Linux需要修改配置文件:

# cd libnut
# vi config.mak

在最后一个CFLAGS下一行增加:

CFLAGS += -fPIC

然后编译安装:

# make
# make install

11. 安装libogg

# wget http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz
# tar xvf libogg-1.1.3.tar.gz
# cd libogg-1.1.3
# ./configure
# make
# make install

12. 安装libtheora (svn获取)

# svn co http://svn.xiph.org/trunk/theora theora
# cd theora
# ./autogen.sh
# ./configure
# make
# make install

13. 安装libvorbis

# wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.0.tar.gz
# tar xvfz libvorbis-1.2.0.tar.gz
# cd libvorbis-1.2.0
# ./configure
# make
# make install

14.安装libv4l(video for linux)
下载地址:http://linuxtv.org/downloads/v4l-utils/v4l-utils-0.8.5.tar.bz2

sudo make sudo make install

15. 安装libxvid

下载地址http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz,然后:


# cd xvidcore-1.3.2/build/generic
# ./configure
# make
# make install

上面的媒体支持库安装完后,可以设置下环境准备编译FFmpeg了!
16. 修改环境变量

# vi /etc/ld.so.conf

在文件末增加一行:

/usr/local/lib

然后生效之:

# ldconfig

17. 安装FFmpeg-0.7版本:
(1)下载:

# http://ffmpeg.org/releases/ffmpeg-0.7-rc1.tar.gz
解压后进入ffmpeg的目录

(2)编译

./configure –enable-gpl –enable-version3 –enable-nonfree –enable-postproc –enable-libfaac –enable-libopencore-amrnb –enable-libopencore-amrwb –enable-libtheora –enable-libvorbis –enable-libxvid –enable-x11grab –enable-swscale –enable-shared

然后:

# make

(这一步可能出错:

libx264.c:190: error: ‘x264_param_t’ has no member named ‘b_bframe_pyramid’

make[2]: *** [libx264.o] Error 1

解决方法:Apparently lix264 renamed variable “b_bframe-pyramid” to “i_bframe_pyramid”.

所以把报错的地方b_bframe-pyramid改成i_bframe-pyramid

接着:
# make install

18. 其他可能出现的错误:

/usr/include/linux/videodev.h:56: error: syntax error before ”ulong”
/usr/include/linux/videodev.h:72: error: syntax error before ’}' token
libavdevice/v4l.c: In function `grab_read_header’:
libavdevice/v4l.c:75: error: storage size of ’tuner’ isn’t known
libavdevice/v4l.c:133: error: invalid application of `sizeof’ to incomplete type `video_tuner’
libavdevice/v4l.c:140: error: invalid application of `sizeof’ to incomplete type `video_tuner’
libavdevice/v4l.c:75: warning: unused variable `tuner’

这可能是源代码videodev.h不是针对次版本Linux写的,标准C没有ulong类型,所以要改成unsigned long

19. 运行ffmpeg -formats,可能出的错误:

ffmpeg: error while loading shared libraries: libavfilter.so.0: cannot open shared object file: No such file or directory

这事没有设置环境路径造成了,增加一个ffmpeg.conf配置文件:

# cd /etc/ld.so.conf.d
# vi ffmpeg.conf

在文件内写上:

/usr/local/lib

然后确认生效:

# ldconfig

 

20. 其他:
本文中没有提到libgsm的安装,请参考下面的资料。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一、安装opencv:

 

1. mkdir release                   //创建文件夹 release

2. cd release

3.

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_TBB=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON ..

4. make

 

(1)Make的时候报错:undefined reference to `cvCreateCameraCapture_V4L(int)’collect2: ld returned 1 exit status make[2]: ***

 

解决方法:

参考https://code.ros.org/trac/opencv/changeset/5206

 

其中的highgui/src/cap.cpp 即src/highgui目录下的cvcap.cpp文件

/highgui/src/cap_libv4l.cpp 即src/highgui目录下的cvcap_libv4l.cpp文件

 

 

 

(2)然后继续make,又报错:fatal error: linux/videodev.h: No such file or directory,

参考http://stackoverflow.com/questions/5842235/linux-videodev-h-no-such-file-or-directory-opencv-on-ubuntu-11-04

则解决方法如下:

sudo yum install libv4l-devel
sudo ln -s /usr/include/libv4l1-videodev.h   /usr/include/linux/videodev.h

 

(3)然后继续make,有报错:

samples/c/image.cpp:16  error: ‘stderr’ was not declared in this scope

解决方法:在image.cpp文件签名添加#include <stdio.h>

重新编译,成功了。

 

PS:
输入locate c++命令,发现没有类似于/usr/include/c++这样的输出


测试:

cd ~/OpenCV-2.3.0/samples/c  进入OpenCV源代码目录中的sample

2. chmod +x build_all.sh

3. ./build_all.sh

4. ./facedetect –cascade=”/usr/local/share/opencv/haarcascades/haarcascade_frontalface_alt.xml” –scale=1.5 lena.jpg

第4步报错:./facedetect: error while loading shared libraries: libcxcore.so.2.0: cannot open shared object file: No such file or directory

这是因为环境没设置好,解决方法:

添加库的路径
1. sudo gedit /etc/ld.so.conf.d/opencv.conf         //此时虚拟终端的路径为:用户主目录   加入:/usr/local/lib  然后保存
2. sudo ldconfig    更新系统库
3. sudo gedit /etc/environment (或sudo gedit/etc/bash.bashrc)设置环境变量                  //此时虚拟终端的路径为:用户主目录   加入PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
OpenCV的设置都完成了。

 

然后重新输入./facedetect: error while loading shared libraries: libcxcore.so.2.0: cannot open shared object file: No such file or directory

可以看到有张美女图片显示出来!

成功了。

 

参考:

http://blog.sina.com.cn/s/blog_6fe1657d0100xlie.html

http://www.blogjava.net/javaren/articles/install_ffmpeg_on_linux_64bit.html

http://blog.csdn.net/zhuqing_739/article/details/6634943

http://hi.baidu.com/herba1/item/2694088a8f08d9deef083d11