目录
一、图像的成像原理:
RGB 和 YUV 是两种常见的颜色空间模型
-
RGB成像原理:
RGB 即红(Red)、绿(Green)、蓝(Blue),是一种基于三原色原理的颜色空间,在显示设备(如电脑显示屏、手机屏幕等)中,每个像素点都由红、绿、蓝三个子像素组成。通过控制这三个子像素的发光强度,就可以混合出各种不同的颜色
-
YUV成像原理:
YUV 是一种将亮度和色度分离的颜色空间。其中,Y 表示亮度,它反映了图像的明亮程度;U 和 V 表示色度,用于描述颜色的色调和饱和度,它们携带了图像的颜色信息
二、多线程
因为耗时逻辑就会造成UI卡顿,卡死或则白屏,所以不能在槽函数里面做太耗时操作(文件、解码都不行),所以使用了多线程,在UI主线程中,不执行耗时逻辑,耗时逻辑放在子线程去完成
三、ffmpeg解码(照片提取)
1.准备工作
(1)在工程文件夹里面新建三个文件夹
(2)在main函数中加入这两个
(3)在要解码的多线程子线程中加入
(4)在.pro文件工程里面加入
2.初始化文件相关操作
(1)注册主键
注册所有可用的编解码器、格式和协议等组件,这是使用 FFmpeg 进行编解码操作的第一步
av_register_all();
(2)打开视频文件
为 AVFormatContext
分配内存,然后打开指定的视频文件。AVFormatContext
用于存储输入视频文件的格式信息
AVFormatContext *formatContext;
//开空间
formatContext=avformat_alloc_context();
//打开输入视频文件
int res=avformat_open_input(&formatContext,"../video/Warcraft3_End.avi",nullptr,nullptr);
if(res<0)
{
qDebug()<<"open avformat_open_input fail";
}
else {
qDebug()<<"success";
}