当前位置: 首页 > wzjs >正文

自助网站搭建系统微信软文是什么

自助网站搭建系统,微信软文是什么,电商网页模板,网站制作合同目录 一、图像的成像原理: RGB成像原理: YUV成像原理: 二、多线程 三、ffmpeg解码(照片提取) 1.准备工作 (1)在工程文件夹里面新建三个文件夹 (2)在main函数中加…

目录

一、图像的成像原理:

RGB成像原理:

YUV成像原理:

二、多线程

三、ffmpeg解码(照片提取)

1.准备工作

(1)在工程文件夹里面新建三个文件夹

(2)在main函数中加入这两个

(3)在要解码的多线程子线程中加入

(4)在.pro文件工程里面加入

2.注册主键

3.打开视频文件

4.获取视频信息

5.判断是否有视频流

6.查找编码器

7.打开编码器

8.读取一帧压缩数据

9.读取一帧压缩数据,解码一帧数据

四、视频播放

1.paintEvent界面重绘事件

2.普通类如何使用信号与槽

3.在子线程中发送图片信号

4.在UI主线程槽函数接收


一、图像的成像原理:

RGB 和 YUV 是两种常见的颜色空间模型

  • RGB成像原理:

RGB 即红(Red)、绿(Green)、蓝(Blue),是一种基于三原色原理的颜色空间,在显示设备(如电脑显示屏、手机屏幕等)中,每个像素点都由红、绿、蓝三个子像素组成。通过控制这三个子像素的发光强度,就可以混合出各种不同的颜色

  • YUV成像原理:

YUV 是一种将亮度和色度分离的颜色空间。其中,Y 表示亮度,它反映了图像的明亮程度;U 和 V 表示色度,用于描述颜色的色调和饱和度,它们携带了图像的颜色信息

二、多线程

因为耗时逻辑就会造成UI卡顿,卡死或则白屏,所以不能在槽函数里面做太耗时操作(文件、解码都不行),所以使用了多线程,在UI主线程中,不执行耗时逻辑,耗时逻辑放在子线程去完成

三、ffmpeg解码(照片提取)

1.准备工作

(1)在工程文件夹里面新建三个文件夹

(2)在main函数中加入这两个

(3)在要解码的多线程子线程中加入

(4)在.pro文件工程里面加入

2.注册主键

av_register_all();

3.打开视频文件

    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";

    }

4.获取视频信息

 res=avformat_find_stream_info(formatContext,nullptr);

    if(res<0)

    {

        qDebug()<<"avformat_find_stream_info fail";

    }

    else {

        qDebug()<<"avformat_find_stream_info success";

    }

5.判断是否有视频流

 int video_input=-1;

    //nb_streams:输入视频的AVStream个数

    for(int i=0;i<formatContext->nb_streams;i++)

    {

        /*

         * streams :输入视频的AVStream []数组

         *   有0或者1:0表示视频,1表示音频

         * codec:编码器

         * codec_type:编码的类型:

         * (1)AVMEDIA_TYPE_VIDEO:表示视频类型。

           (2)AVMEDIA_TYPE_AUDIO:表示音频类型。

           (3)AVMEDIA_TYPE_SUBTITLE:表示字幕类型。

        */

        if(formatContext->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO)

        {

            video_input=i;

            break;

        }

    }

    if(video_input==-1)

    {

        qDebug()<<"video not find";

    }

    else {

        qDebug()<<formatContext->streams[video_input]->nb_frames;

        qDebug()<<"video_input"<<video_input;

    }

6.查找编码器

保存视频编解码相关信息,存储解码器上下文信息的结构体

 AVCodecContext* codecContext=formatContext->streams[video_input]->codec;

    //通过文件信息中编码id找到解码器

    // 每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。

    AVCodec* decoder=avcodec_find_decoder(codecContext->codec_id);

    if(decoder==nullptr)

    {

        qDebug()<<"avcodec_find_decoder fail";

    }

    else {

        qDebug()<<"avcodec_find_decoder success";

    }

7.打开编码器

 res=avcodec_open2(codecContext,decoder,nullptr);

    if(res!=0)

    {

        qDebug()<<"avcodec_open2 fail";

    }

    else {

        qDebug()<<"avcodec_open2 success";

    }

8.读取一帧压缩数据

//********AVPacket开始**********

    //AVPacket 是 FFmpeg 中用于存储压缩数据的结构体

    AVPacket* pkt;

    pkt=(AVPacket*)malloc(sizeof (AVPacket));

    int size=codecContext->width * codecContext->height;

    res=av_new_packet(pkt,size);

    if(res!=0)

    {

        qDebug()<<"av_new_packet fail";

    }

    else {

        qDebug()<<"av_new_packet success";

    }

    //********AVPacket准备工作完成**********

    //********AVFrame RGB准备工作**********

    //AVFrame 用于存储解码后的原始数据

    AVFrame* pictureRGB;

    AVFrame* picture;

    picture=av_frame_alloc();

    pictureRGB=av_frame_alloc();

    //解码画面信息按原图信息设置

    pictureRGB->width=codecContext->width;

    pictureRGB->height=codecContext->height;

    pictureRGB->format=codecContext->pix_fmt;//帧画面信息

    //设置缓冲区

    int imgByteRGB=avpicture_get_size(AV_PIX_FMT_RGB32,codecContext->width,codecContext->height);

    uint8_t *bufferRGB=(uint8_t*)av_malloc(imgByteRGB* sizeof (uint8_t));

    //填充缓冲区

    avpicture_fill((AVPicture*)pictureRGB,bufferRGB,AV_PIX_FMT_RGB32,codecContext->width,codecContext->height);

    //制定一个图像规则

    //转换前的视频宽高到转换后的视频宽高

    SwsContext* SwsContextRGB=sws_getContext(codecContext->width,codecContext->height,codecContext->pix_fmt,

                                             codecContext->width,codecContext->height,AV_PIX_FMT_RGB32,

                                             SWS_BICUBIC,nullptr,nullptr,nullptr);

    //********AVFrame准备工作完成**********

9.读取一帧压缩数据,解码一帧数据

int x=0;

    //从输入文件读取一帧压缩数据,操作正常返回0

    while(av_read_frame(formatContext,pkt)==0)

    {

        //判断压缩数据是否为图像压缩数据

        if(pkt->stream_index==video_input)

        {

            //参数默认配置

            int get_picture_ptr=-1;

          /*解码一帧压缩:

          *  codecContext:AVCodecContext 包含了编解码器的上下文信息

          *  picture:AVFrame 用于存储解码后的视频帧数据

       *  get_picture_ptr:一个指向整数的指针,用于指示是否成功解码出一帧完整的视频图像

          * 如果解码成功并得到了一个完整的视频帧,该指针所指向的变量会被设置为非零值

          *  如果没有得到完整的帧,该变量会被设置为零

          *  pkt:AVPacket 用于存储压缩的视频数据包

          */

            avcodec_decode_video2(codecContext,picture,&get_picture_ptr,pkt);

            if(get_picture_ptr!=0)

            {

                //删除无效数据,转RGB存储

                //picture:原图    pictureRGB:转换后的图

                sws_scale(SwsContextRGB,picture->data,picture->linesize,0,picture->height,pictureRGB->data,pictureRGB->linesize);

                this->img=QImage((uchar *)bufferRGB,codecContext->width,codecContext->height,QImage::Format_RGB32);

                this->img.save(QString("../fileout/%1.jpg").arg(x));//保存进文件夹

//                emit sendImage(this->img);

//                msleep(40);//设置发送间隔时间

                x++;

            }

        }

        av_packet_unref(pkt);

    }

    //关闭解码器

    avcodec_close(codecContext);

    //释放关闭文件

    avformat_close_input(&formatContext);

四、视频播放

1.paintEvent界面重绘事件

Qt UI窗口存在事件循环机制,在QWidget类中,子类需要实现这个paintEvent事件,在窗口产生显示/切换/最大化/最小化自动调用,不需要自己调用,而update函数可以手动触发paintEvent重绘事件

2.普通类如何使用信号与槽

普通类在debug文件夹中不会生成moc_开头的文件,而信号与槽的核心机制为moc

第一步:删除工程项目下debug文件夹里的全部东西

3.在子线程中发送图片信号

4.在UI主线程槽函数接收

http://www.dtcms.com/wzjs/86765.html

相关文章:

  • 博物馆网站建设中国十大企业培训公司
  • 写代码建商城网站时间高端网站定制设计
  • 企业展厅设计费用多少seo兼职外包
  • 大气广告设计网站源码 企业公司模板 dedecms5.7 企业网站淘宝关键词指数
  • 建设网站iss百度搜索关键词排名
  • 松原建设局网站口碑营销的产品有哪些
  • 推广网站wap端怎么做seo网站设计
  • 云手机免费版无限挂机seo优化方法有哪些
  • 商贸公司企业简介模板抖音seo供应商
  • 做美女图片网站犯法吗网站排名推广推荐
  • 空白网站怎么建立内容营销
  • 用dw6做网站百度快照优化排名
  • 网站搭建设计 是什么四川游戏seo整站优化
  • c 可以做网站吗成都网站快速排名软件
  • 南汇做网站公司哈尔滨百度推广联系人
  • 三门峡做网站推广个人博客登录首页
  • 网站制作与维护费用app推广的常用方法
  • 东台做网站公司seo com
  • 陕西省建设工程招投标信息网官网seo线上培训班
  • 网站建设管理界面优化网站结构一般包括
  • 用asp怎么做网站推广运营怎么做
  • 域名同时做邮箱和网站seo自动推广工具
  • 免费建站网站群如何开网店
  • 020网站建设合同范本手机百度app下载安装
  • 大连网站建设哪家好百度安全中心
  • 定制企业网站网站快速被百度收录
  • 深圳高水平网站制作网站的推广方法
  • 重庆专业做网站上海百度推广公司
  • wordpress首页api幻灯片宁波seo整站优化
  • 网站建设技术外包专业做网站