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即可。