树莓派相关配置(opencv+ffmpeg)

 0、树莓派中文设置,参考:树莓派(三)——新系统设置(更改密码,中文设置等)_喵-CSDN博客_树莓派改密码

1、树莓派国内镜像源配置,参考:树莓派更换国内镜像源 - 贱书生 - 博客园 (cnblogs.com)

2、安装opencv相关依赖库,参考:用树莓派4b构建深度学习应用(三)OpenCV篇 - 知乎 (zhihu.com)

sudo apt-get -y install build-essential cmake unzip pkg-config
sudo apt-get -y install libjpeg-dev libpng-dev libtiff-dev
sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get -y install libxvidcore-dev libx264-dev
sudo apt-get -y install libgtk-3-dev
sudo apt-get -y install libcanberra-gtk*
sudo apt-get -y install libatlas-base-dev gfortran

3、安装ffmpeg库:参考 :用树莓派4b构建深度学习应用(三)OpenCV篇 - 知乎 (zhihu.com)

安装ffmpeg依赖:

sudo apt-get install yasm
sudo apt-get install libsdl2-dev -y

下载、配置、编译、安装,默认安装目录在/usr/local下。 

wget http://ffmpeg.org/releases/ffmpeg-4.3.1.tar.gz
tar -xvf ffmpeg-4.3.1.tar.gz
cd ffmpeg-4.3.1
./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree --enable-pic --enable-shared
make
sudo make install

配置ldconfig,进入root用户,并执行:

echo "/usr/local/lib" >> /etc/ld.so.conf  
ldconfig
ffmpeg -version

 4、安装opencv 4.4.0

使用cmake-gui进行默认配置:(使用sudo apt-get install cmake-qt-gui 安装cmake-gui),这里参考:cmake gui安装教程_树莓派安装OpenCV-4.3.0+Python_A菲拉格慕(小艳子)的博客-CSDN博客C++ - 使用 CMake (cmake-gui) 编译第三方库 - 郑大峰 - 博客园 (cnblogs.com)

下载opencv源码包并解压进入opencv4.4.0文件夹,并新建文件夹build,在命令行输入cmake-gui打开cmake配置界面,选择unix下默认配置(默认安装目录在/usr/local下),然后点击configure,检查配置文件中with-ffmpeg是否打开,其他文件目录是否正确。然后再点击configure、generate,完成cmake。

回到build文件夹中,执行make&&make install

5、配置pkg-config,参考:linux下使用ffmpeg与opencv联合编程_littlestranger的博客-CSDN博客

打开环境变量文档

vim /etc/profile  

在文尾输入:

export FFMPEG_HOME=/usr/local

export PATH=$FFMPEG_HOME/bin:$PATH

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

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

退出编辑,回到终端,使环境变量生效

source /etc/profile

在/usr/local/lib/pkgconfig文件夹下可以看到相关库的.pc文件,在该文件夹下创建ffmpeg.pc、opencv.pc两个文件,文件内容如下:

ffmpeg.pc

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


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

Cflags: -I${includedir}

opencv.pc 

# Package Information for pkg-config


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


Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.4.0
Libs: -L${exec_prefix}/lib -lopencv_ml -lopencv_dnn -lopencv_core  -lopencv_gapi -lopencv_flann -lopencv_photo -lopencv_video -lopencv_calib3d -lopencv_highgui -lopencv_imgproc  -lopencv_videoio -lopencv_objdetect -lopencv_stitching -lopencv_features2d  -lopencv_imgcodecs 
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 -lrt

Cflags: -I${includedir_old} -I${includedir_new}

生成这两个文件后,就可以在命令行里通过pkg-config命令查询ffmpeg、opencv相关库目录信息。

pkg-config ffmpeg --cflags --libs
pkg-config opencv --cflags --libs

之后可以将`pkg-config ffmpeg opencv--cflags --libs`这些命令写在opencv相关项目的makefile中去,获取opencv和ffmpeg库信息。

6、测试C++应用示例

rw_video.cpp读取tof_depth.avi并调用窗口显示,最后将视频又保存为copy.avi。具体代码如下:


#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) 
{
	
	VideoCapture capture;
	capture.open("/home/pi/Videos/depth/tof_depth.avi");
	VideoWriter writer("copy.avi", VideoWriter::fourcc('M', 'J', 'P', 'G'), 25.0, Size(640, 480));
	if (!capture.isOpened()) {
		printf("could not load video data...\n");
		return -1;
	}
	int frames = capture.get(CAP_PROP_FRAME_COUNT);
	double fps = capture.get(CAP_PROP_FPS);

	Size size = Size(capture.get(CAP_PROP_FRAME_WIDTH), capture.get(CAP_PROP_FRAME_HEIGHT));
	cout << frames << endl;
	cout << fps << endl;
	cout << size << endl;
	
	Mat frame;
	namedWindow("video-demo", WINDOW_AUTOSIZE);
	
	for (;;)
	{		
		capture >> frame;
		writer << frame;
		
		if (frame.empty())break;
		imshow("video-demo",frame);
		
		if (waitKey(33) >= 0) break;
	}
	
	capture.release();
	return 0;
}

在 rw_video.cpp所在目录下执行下面命令

g++ `pkg-config ffmpeg opencv --cflags`  rw_video.cpp -o rw_video `pkg-config ffmpeg opencv --libs`

生成rw_video文件后,./rw_video即可。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值