【环境搭建】在ubuntu16.04上编译安装ffmpeg和opencv

在Ubuntu16.04上安装ffmpeg

sudo apt-get install yasm
sudo apt-get install build-essential
# -y的意思是当询问是否安装时,默认选Yes
sudo apt-get install -y libass-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libsdl2-dev
sudo apt-get install libtheora-dev
sudo apt-get install libva-dev
sudo apt-get install libvdpau-dev
sudo apt-get install libvorbis-dev
sudo apt-get install libxcb1-dev
sudo apt-get install libxcb-shm0-dev
sudo apt-get install libxcb-xfixes0-dev
sudo apt-get install texinfo
sudo apt-get install zlib1g-dev

【环境搭建】glog和gflags的安装中通过apt方式安装的包这里也需要。

  1. 编译安装NASM
    http://www.linuxfromscratch.org/blfs/view/svn/general/nasm.html
    在该网页下载NASM源码压缩包
    在这里插入图片描述
./configure --prefix=/安装路径
make
make install
  1. 编译安装x264
    源码网页:https://www.videolan.org/developers/x264.html
git clone https://code.videolan.org/videolan/x264.git
./configure --enable-shared --enable-static --prefix=/安装路径
make
make install
  1. 搜索ffmpeg
    图5
    图6
  2. 下载ffmpeg源码
    图7
    图8
# 将下载的源码包移动到自己的源码包存放目录下
mv ffmpeg-4.1.tar.bz2 /thirdparty-source
tar -jxvf ffmpeg-4.1.tar.bz2

tar解压缩:

  • j:带bz2属性的
  • z:带gz属性的
  • x:解压
  • v:显示解压过程
  • f:使用文档名字
# "--prefix"后面的目录是指定的安装目录
# --enable-shared等命令的规范和用处出自configure文件,见下图
# 类似的,还可以在./configure后按照相同格式添加命令,让ffmpeg拥有各类功能
./configure --prefix=/thirdparty/ffmpeg-4.1 --enable-shared --enable-gpl --enable-libx264

图9

# 因为这次安装ffmpeg我用的电脑是双核CPU,所以最大使用make -j4(四线程),-j后面的数太大会使电脑死机
make -j4
# 在sudo下 make install 的第三方软件更改必须在sudo下进行
# 直接 make install 的第三方软件可以在普通用户权限下进行更改
sudo make install

【环境搭建】glog和gflags的安装中的环境变量文件中添加ffmpeg的环境路径,如下。

# ffmpeg
export C_INCLUDE_PATH="/thirdparty/ffmpeg-4.1/include":$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH="/thirdparty/ffmpeg-4.1/include":$CPLUS_INCLUDE_PATH
export LD_LIBRARY_PATH="/thirdparty/ffmpeg-4.1/lib":$LD_LIBRARY_PATH
export LIBRARY_PATH="/thirdparty/ffmpeg-4.1/lib":$LIBRARY_PATH
export PKG_CONFIG_PATH="/thirdparty/ffmpeg-4.1/lib/pkgconfig":$PKG_CONFIG_PATH
# PATH 很重要,忘记了会报ffmpeg未安装
export PATH="/thirdparty/ffmpeg-4.1/bin":$PATH

保存退出vim后执行下面的命令使环境变量临时生效。

source .bash_profile
# 查看ffmpeg版本
ffmpeg -version

在Ubuntu16.04上安装OpenCV

安装过程是接着上面的ffmpeg的,重复的依赖包下面不再给出。

  1. 搜索OpenCV
    图1
    图2
  2. 下载OpenCV3.4.5源码
    图3
    图4
sudo apt-get install libgtk2.0-dev
sudo apt-get install libavcodec-dev
sudo apt-get install libavformat-dev
sudo apt-get install libswscale-dev
# 这个包不是Python,这个包是通过编译安装Python的第三方库所必须的包
sudo apt-get install python-dev
sudo apt-get install python-numpy
sudo apt-get install libtbb2
sudo apt-get install libtbb-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libpng-dev
sudo apt-get install libtiff-dev
sudo apt-get install libjasper-dev
sudo apt-get install libdc1394-22-dev
sudo apt-get install libv4l-dev
sudo apt-get install liblapacke-dev
sudo apt-get install libxvidcore-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install gfortran
sudo apt-get install ccache
sudo apt-get install libgstreamer-plugins-base1.0-dev
# 解压源码文件
unzip opencv-3.4.5.zip
cd opencv-3.4.5
# 新建一个名为build的文件夹,在这个空文件夹中编译,编译生成的文件都存放在这个文件夹中
mkdir build
cd build
cmake ../ -DPYTHON_INCLUDE_DIR=/usr/include/python2.7 -DPYTHON_LIBRARY=/usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/thirdparty/opencv
make -j4
sudo make install

同样,这里需要在环境变量文件中添加OpenCV相关的路径。

# opencv
export C_INCLUDE_PATH="/thirdparty/opencv/include":$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH="/thirdparty/opencv/include":$CPLUS_INCLUDE_PATH
export LD_LIBRARY_PATH="/thirdparty/opencv/lib":$LD_LIBRARY_PATH
export LIBRARY_PATH="/thirdparty/opencv/lib":$LIBRARY_PATH
export CMAKE_PREFIX_PATH="/thirdparty/opencv":$CMAKE_PREFIX_PATH
# cv2.so文件所在路径
export PYTHONPATH="/thirdparty/opencv/lib/python2.7/dist-packages/cv2/python-2.7":$PYTHONPATH

安装opencv_contrib

https://github.com/opencv/opencv_contrib下载和opencv版本对应的opencv_contrib源码包。
opencv和opencv_contrib版本应不大于3.4.2,否则使用某些模块时会因为专利问题报错。
安装过程和上面的介绍只有一处不同,如下:

cmake ../ -DPYTHON_INCLUDE_DIR=/usr/include/python3.5 -DPYTHON_LIBRARY=/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu/libpython3.5.so -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/thirdparty/opencv-3.4.2 -DOPENCV_EXTRA_MODULES_PATH=/thirdparty-source/opencv_contrib-3.4.2/modules /thirdparty-source/opencv-3.4.2

安装Cuda加速(OpenCV GPU版)

cmake ../ -DPYTHON_INCLUDE_DIR=/usr/include/python3.5 -DPYTHON_LIBRARY=/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu/libpython3.5.so -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/thirdparty/opencv -DWITH_TBB=ON -DWITH_V4L=ON -DWITH_QT=ON -DWITH_OPENGL=ON -DWITH_CUDA=ON -DENABLE_FAST_MATH=1 -DCUDA_FAST_MATH=1 -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" -DWITH_CUBLAS=1 -DOPENCV_EXTRA_MODULES_PATH=/thirdparty-source/opencv_contrib-3.4.2/modules /thirdparty-source/opencv-3.4.2

如果make时遇到报错如下:

fatal error: dynlink_nvcuvid.h: 没有那个文件或目录

解决方案如下:
https://developer.nvidia.com/nvidia-video-codec-sdk下载NVIDIA VIDEO CODEC SDK
在这里插入图片描述
在这里插入图片描述
下载后将解压得到的include中的cuviddec.h 和 nvcuvid.h文件拷贝到/usr/local/cuda/include路径下

将opencv源码包中的modules/cudacodec/src路径下的:

  • cuvid_video_source.hpp
  • frame_queue.hpp
  • precomp.hpp
  • video_decoder.hpp
  • video_parser.hpp

中的:

#if CUDA_VERSION >= 9000
     #include <dynlink_nvcuvid.h>
#else
     #include <nvcuvid.h>

改为:

#if CUDA_VERSION >= 9000 && CUDA_VERSION < 10000
     #include <dynlink_nvcuvid.h>
#else
     #include <nvcuvid.h>

编译安装成功后测试:

#include <opencv2/opencv.hpp>                                                                                                                                                                           #include <opencv2/core/cuda.hpp>
 
using namespace std;
using namespace cv;

nt main()
{
    int num_devices = cuda::getCudaEnabledDeviceCount();
    cout<<num_devices<<endl;
}     

编译执行后,如果输出是机器的GPU数量,则安装成功。如果输出是0,则安装存在问题

结语

如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
如果我的文章对您有帮助,转载请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值