在linux下使用opencv处理视频与摄像头采集是经常会遇到无法打开streams的问题,下面介绍如何配置ffmpeg和使用opencv解决这个问题。

首先下载ffmpeg源码包,一定要是源码包,ctrl + alt +t打开终端(文字是说明):

cd ffmpeg/   设置工作目录

./configure --disable-yasm --enbale-shared --prefix=/usr/local/ffmpeg 生成可连接库,--prefix设置安装路径

make

make install 开始安装

vim /etc/profile 打开环境变量文档

在文尾输入:

export FFMPEG_HOME=/usr/local/ffmpeg

export PATH=$FFMPEG_HOME/bin:$PATH

退出编辑,回到终端

source /etc/profile

ffmpeg -version  如果显示版本信息,就证明ffmpeg已经成功安装了

vim /etc/profile 添加动态库路径

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib


到这里完成安装ffmpeg了,下面开始安装pkg-config

直接使用从linux源安装即可,执行

apt-get install pkgconfig 等待安装结束

vim /etc/profile  打开环境变量文档,并在文末输入

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig:/usr/loal/lib

安装配置完成。这一步基本不会出问题。


安装cmake,还是使用linux源安装即可

apt-get install cmake 这里我选择安装的是精简版的,不带图形界面的


安装opencv,网上下载源码安装包,其实这里可以直接用linux源安装

cd opencv/ 进入opencv目录

mkdir release 新建文件夹

cmake -D CMAKE_BUILD_TYPE= RELEASE -D CMAKE_INSTALL_PATH=/usr/local .. 使用Cmake进行编译别少了两点

观察终端输出,到后头会输出ffmpeg  yes等字眼,显示已经支持ffmpeg了

这里可以编译你的ffmpeg和opencv工程了。

首先检测你的环境是否配置成功。

pkg-config  ffmpeg --libs --cflags查看ffmpeg链接库是否配置好了(如果没配置好也别着急,继续往下看)

pkg-config opencv --libs --cflags查看opencv链接库和头文件配置

如果没有打印程序的链接库路径,说明链接库没有完整配置好

这个时候首进入ffmpeg文件目录(不是源码目录,是软件安装目录/usr/local/ffmpeg/)/lib的目录的所有文件复制到/usr/local/lib目录下;然后打开ffmpeg/lib/的里有个pkgconfig,把里头的文件全部复制到/usr/local/lib/pkgconfig里头。

将工作目录设置到

cd /usr/local/lib/pkgconfig
vim ffmpeg.pc

编辑ffmpeg.pc

输入

prefix=/usr/local/ffmpeg
exec_prefix=${prefix}
libdir=/usr/local/ffmpeg/lib
includedir=/usr/local/ffmpeg/include


Name: ffmpeg
Description: FFmpeg codec library
Version: 58.17.100
Requires: 
Requires.private: libswresample >= 3.0.101, libavutil >= 56.13.100
Conflicts:
Libs: -L${libdir}  -lavcodec -lavdevice -lavfilter -lavformat -lavutil -lswresample -lswscale
Libs.private: -L/usr/lib/arm-linux-gnueabinhf -lm -lxcb -lxcb-shm -lxcb -lxcb-shape -lxcb -lxcb-xfixes -lxcb-render -lxcb-shape -lxcbCflags: -I${includedir}

保存退出即可。

vim opencv.pc

编辑opencv.pc

# Package Information for pkg-config


prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include


Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.1.0
Libs: -L${exec_prefix}/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
Libs.private: -L/usr/lib/arm-linux-gnueabihf -lpng -lz -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lgthread-2.0 -lglib-2.0 -ldl -lm -lpthread -lrtCflags: -I${includedir_old} -I${includedir_new}

保存退出

现在基本完成了配置了

开始交叉编译你的工程

g++ `pkg-config opencv ffmpeg --cflags`  你的文件.cpp -o run `pkg-config opencv ffmpeg --libs`

也可以手动制定你的链接库和头文件路径

g++ -o run.exe 你的文件.cpp -I/usr/local/ffmpeg/include  -I/usr/local/include -I/home/root/cv/ffmpegFrameToOpencv -L/usr/local/ffmpeg/lib -lavformat -lavdevice -lavcodec -lavutil  -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core

Libs

-I表示头文件路径,-L表示链接库路径,-l表示要链接的库。

这里已经完成工作了

./run 就可以跑你的工程了

ps:其实也可以在/etc/ld.so.conf文件中添加库路径/usr/local/lib,然后在终端ldconfig。第一次写博客,可能有点乱,希望能帮助有需要的朋友