【opencv x ffmpeg】一、Linux下安装与编译(Ubuntu18.04)

目录

一、ffmpeg安装和编译

二、opencv安装和编译

1、安装依赖

2、下载源代码

3、编译

4、环境配置

4.1 指定库路径

 4.2 获取头文件路径

三、配置成果 


一、ffmpeg安装和编译

        因为opencv和ffmpeg的兼容性问题,所以在安装ffmpeg的时候不能选择高于ffmpeg 4.4版本进行编译,ffmpeg高于4.4版本的,API接口变动太大,无法与opencv兼容,在对opencv进行编译的时候会报错。这里选择的是ffmpeg 4.2.2版本进行安装。

git clone --depth=1 https://git.ffmpeg.org/ffmpeg.git -b n4.2.2

        后面的安装步骤本人之前写过,就不重复叙述,可以跳转到我之前写过的文章进行查看:ffmpeg基础(二)Linux环境下ffmpeg的配置(Ubuntu 18.04)_谢老板不用蟹的博客-CSDN博客

二、opencv安装和编译

1、安装依赖

sudo apt install build-essential
sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

        如果提示:错误:E: 无法定位软件包 libjasper-dev,按照下面的命令执行

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
# libjasper1是libjasper-dev的依赖包
sudo apt install libjasper1 libjasper-dev

2、下载源代码

git clone https://github.com/opencv/opencv.git

3、编译

进入到下载好的opencv-4.x目录。

cd opencv-4.x

 创建build目录,用来存放编译好的文件。

mkdir build

进入到build目录下。

cd build

使用cmake进行配置。

-CMAKE_BUILD_TYPE=Release        代表你想编release版本还是debug版本

-CMAKE_INSTALL_PREFIX        是你的.so文件最终放在哪

-DOPENCV_GENERATE_PKGCONFIG=ON        用来生成.pc文件,这个选项一定要加。

-..        表示CMakeLists.txt生成路径

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D DOPENCV_GENERATE_PKGCONFIG=ON ..

 make编译

make -j8

sudo make install

可能遇到的问题

        如果在make的时候出现了 c++: internal compiler error: Killed (program cc1plus),其原因是在编译过程中,内存不够造成的。

         解决问题:

        使用swap创建临时分区

sudo dd if=/dev/zero of=/swapfile bs=64M count=16
#count的大小就是增加的swap空间的大小,64M是块大小,所以空间大小是bs*count=1024MB

sudo mkswap /swapfile
#把刚才空间格式化成swap格式

chmod 0600 /swapfile  
#该目录权限,不改的话,在下一步启动时会报“swapon: /swapfile: insecure permissions 0644, 0600 suggested.”错误

sudo swapon /swapfile
#使用刚才创建的swap空间

        如果提示:dd: 打开'/swapfile' 失败: 文本文件忙。执行下面的命令。

sudo swapoff -a

        重新执行前面的命令。

因为我们指定了安装路径,所以我们的头文件被放在/usr/local/include/opencv4/opencv2/目录下,我们的库文件被放在/usr/local/lib/目录下,可以进去查看一下这些文件是否是否存在。

接下来可以输入

opencv_version

来判定安装成功的opencv版本号,当出现你安装的opencv版本号时,就安装成功了。 

4、环境配置

4.1 指定库路径

vim /etc/ld.so.conf.d/opencv.conf

在文件末尾添加:/usr/local/lib 

将这个文件保存然后

sudo ldconfig

原理: 

可能出现的问题

        如果不指定库路径,直接编译会出现以下报错信息:opencv_test.cpp:(.text+0x69):对‘cv::Mat::Mat()’未定义的引用
opencv_test.cpp:(.text+0xb3):对‘cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)’未定义的引用
opencv_test.cpp:(.text+0xc9):对‘cv::Mat::operator=(cv::Mat&&)’未定义的引用
opencv_test.cpp:(.text+0xd5):对‘cv::Mat::~Mat()’未定义的引用

         解决方法:查看4.1 指定库路径  4.2 获取头文件路径

 4.2 获取头文件路径

使用pkg-config获取opencv的头文件路径。(使用.pc文件可以获取到)

在build目录下查找opencv4.pc文件路径。

find ./ -name opencv4.pc

 进入unix-install目录。

cd unix-install

 将opencv4.pc文件复制到/usr/lib/pkgconfig路径下。

sudo cp opencv4.pc /usr/lib/pkgconfig/

原因:pkg-config的默认路径是:/usr/lib/pkgconfig/和/usr/share/pkgconfig/,所以使用pkg-config命令的时候会去这两个路径下查找对应的.pc文件。

验证pkg-config是否能够找到opencv4.pc文件。

pkg-config --cflags --libs opencv4

三、配置成果 

进入到opencv-4.x目录下,里面有一个samples文件夹,这个里面全是各种语言的测试

cd opencv-4.3.0/samples/cpp/

进到cpp目录下测试c++使用opencv,随便找一个.cpp文件进行编译

例如:

g++ -o edge edge.cpp `pkg-config --cflags --libs opencv4`

注意这里的两个``是键盘左上方的符号,不是单引号,这代表shell的运行语句

编译成功就代表你的opencv可以使用啦!!!

可能遇到的问题

        opencv需要c++11支持的问题,报错中会有体现,如果有同学的编译信息过多不好直接找报错,可以

g++ -o egde egde.cpp `pkg-config --cflags --libs opencv4` 2> error

这样当前目录下会出现一个error的文件,vim打开再分析就可以

如果是c++11的问题,直接在编译命令后加上-std=c++11,或者将g++更新到最新版本即可

参考:

linux下编译安装opencv生成opencv.pc_浓茶淡酒的博客-CSDN博客_linux下安装opencv

ubuntu20.04安装opencv步骤及依赖报错:E: 无法定位软件包 libjasper-dev_那记忆微凉的博客-CSDN博客

🤓opencv+ffmpeg编译打包全解指南 - 知乎

Ubuntu | 你的内存不够啦:c++: internal compiler error: Killed (program cc1plus)_搞IC的lucas的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢老板不用蟹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值