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

wordpress网站图片易语言 wordpress

wordpress网站图片,易语言 wordpress,软件开发具体工作内容,十大免费实用网站## 前言 视频帧率(Frame Rate)是指视频播放时每秒显示的画面帧数,通常用fps(Frames Per Second)来表示。视频是由一系列静止的图像帧组成的,而视频帧率则决定了这些图像帧在单位时间内播放的速度。较高的视…

## 前言

视频帧率(Frame Rate)是指视频播放时每秒显示的画面帧数,通常用fps(Frames Per Second)来表示。视频是由一系列静止的图像帧组成的,而视频帧率则决定了这些图像帧在单位时间内播放的速度。较高的视频帧率可以提供更流畅的视频画面,而较低的视频帧率则可能导致画面卡顿和不连贯的情况

在实际的应用开发中,经常会遇到需要处理视频的情况,例如提取视频帧用于图像处理、分析等应用。本文将介绍如何利用Qt QML实现视频帧的提取,通过简单的代码示例将图片提取保存到本地中。

## 效果

先看运行效果:

## 正文

本示例通过QML实现UI,Qt5.15 cmake编译,使用多线程处理提取,保证UI主线程不会卡顿,将提取的图片保存到本地。

提取部分,关键代码:

void FrameExtractor::stopProcessing()
{qDebug() << "停止帧提取处理";m_running.store(0);// 清空队列,避免处理不必要的帧QMutexLocker locker(&m_mutex);if (!m_frameQueue.isEmpty()) {qDebug() << "清空帧队列,当前队列长度: " << m_frameQueue.size();m_frameQueue.clear();}// 唤醒等待中的线程m_condition.wakeOne();
}void FrameExtractor::processFrames()
{qDebug() << "开始处理视频帧";while (m_running.load()) {QVideoFrame frame;// 获取下一帧{QMutexLocker locker(&m_mutex);// 如果队列为空且没有更多帧,则结束处理if (m_frameQueue.isEmpty() && m_noMoreFrames.load()) {qDebug() << "队列为空且没有更多帧,结束处理";break;}// 如果队列为空,等待新帧if (m_frameQueue.isEmpty()) {qDebug() << "队列为空,等待新帧...";m_condition.wait(&m_mutex);qDebug() << "等待结束,继续处理";continue;}frame = m_frameQueue.dequeue();qDebug() << "从队列中获取一帧,当前队列长度: " << m_frameQueue.size();}// 处理帧if (frame.isValid()) {QVideoFrame cloneFrame(frame);if (cloneFrame.map(QAbstractVideoBuffer::ReadOnly)) {// 将视频帧转换为QImageQImage image;switch (cloneFrame.pixelFormat()) {case QVideoFrame::Format_RGB32:case QVideoFrame::Format_ARGB32:case QVideoFrame::Format_ARGB32_Premultiplied:image = QImage(cloneFrame.bits(),cloneFrame.width(),cloneFrame.height(),cloneFrame.bytesPerLine(),QImage::Format_RGB32);break;case QVideoFrame::Format_RGB24:image = QImage(cloneFrame.bits(),cloneFrame.width(),cloneFrame.height(),cloneFrame.bytesPerLine(),QImage::Format_RGB888);break;case QVideoFrame::Format_YUYV:case QVideoFrame::Format_UYVY:case QVideoFrame::Format_YUV420P:case QVideoFrame::Format_YV12:case QVideoFrame::Format_NV12:case QVideoFrame::Format_NV21:{// 对于YUV格式,需要进行颜色空间转换// 这里简化处理,将其转换为灰度图像qDebug() << "处理YUV格式视频帧: " << cloneFrame.pixelFormat() << "宽度: " << cloneFrame.width() << "高度: " << cloneFrame.height();// 安全地创建灰度图像image = QImage(cloneFrame.width(), cloneFrame.height(), QImage::Format_Grayscale8);// 只处理Y平面数据,避免访问UV平面导致的问题const uchar *bits = cloneFrame.bits();int bytesPerLine = cloneFrame.bytesPerLine();// 限制处理范围,避免越界访问int maxHeight = qMin(cloneFrame.height(), image.height());int maxWidth = qMin(cloneFrame.width(), image.width());try {for (int y = 0; y < maxHeight; ++y) {for (int x = 0; x < maxWidth; ++x) {// 只取Y分量作为灰度值uchar value = bits[y * bytesPerLine + x];image.setPixelColor(x, y, QColor(value, value, value));}}qDebug() << "YUV帧处理完成";} catch (const std::exception &e) {qDebug() << "处理YUV帧时发生异常: " << e.what();// 如果发生异常,创建一个空白图像image = QImage(cloneFrame.width(), cloneFrame.height(), QImage::Format_Grayscale8);image.fill(Qt::black);}break;}default:// 对于其他格式,尝试转换为RGB32image = QImage(cloneFrame.bits(),cloneFrame.width(),cloneFrame.height(),cloneFrame.bytesPerLine(),QImage::Format_RGB32).copy();break;}// 保存图像if (!image.isNull()) {QString fileName = QString("%1/frame_%2.jpg").arg(m_outputDir).arg(m_extractedCount, 6, 10, QChar('0'));qDebug() << "正在保存图像到: " << fileName;if (image.save(fileName, "JPG")) {m_extractedCount++;qDebug() << "图像保存成功,已提取: " << m_extractedCount << "/" << m_frameCount;emit progressUpdated(m_extractedCount, m_frameCount);} else {qDebug() << "图像保存失败: " << fileName;}} else {qDebug() << "无法保存空图像,跳过当前帧";}cloneFrame.unmap();}}}// 处理完成emit finished();
}

-----------------

本文代码下载


文章转载自:

http://MS0Y8QRe.ktmnq.cn
http://sMnVFgBN.ktmnq.cn
http://AXFwBMGe.ktmnq.cn
http://9iSOeGLq.ktmnq.cn
http://A4dQHdTf.ktmnq.cn
http://SmVnUbB3.ktmnq.cn
http://CUPTtasf.ktmnq.cn
http://paqKjoEi.ktmnq.cn
http://d1scfpn1.ktmnq.cn
http://gBs7bfqY.ktmnq.cn
http://pK1Fsa99.ktmnq.cn
http://oSM6NJg7.ktmnq.cn
http://RF2Iy0CF.ktmnq.cn
http://bMfDylFg.ktmnq.cn
http://UWcKoGYx.ktmnq.cn
http://LdWC9bFq.ktmnq.cn
http://71R2e7EV.ktmnq.cn
http://NqNuysU3.ktmnq.cn
http://PEhHmytN.ktmnq.cn
http://xuqPaGCO.ktmnq.cn
http://zLclBaHY.ktmnq.cn
http://vtf1ynLI.ktmnq.cn
http://S4cb5YYX.ktmnq.cn
http://Iq6DP1eM.ktmnq.cn
http://kqdjky9W.ktmnq.cn
http://jFFhEVZb.ktmnq.cn
http://IW0GvJ4T.ktmnq.cn
http://7wJuym0O.ktmnq.cn
http://lgX84PAZ.ktmnq.cn
http://YLoCgw4f.ktmnq.cn
http://www.dtcms.com/wzjs/667279.html

相关文章:

  • 网站建设与管理做什么wordpress 小工具添加图片大小
  • 做网站很火的APP太原做网站多少钱
  • 招聘网站建设及推广广东广电网络东莞分公司
  • 崂山区建设局网站注册一个有限公司需要多少钱
  • dede做网站地图简单的网页设计作品源码
  • 做哪种网站赚钱网络营销主要做什么
  • 专门帮人做网站的公司建设小说网站风险分析
  • 江苏省住房和建设部网站广州外贸营销型网站建设公司
  • 做c 题的网站江门seo咨询
  • 网站建设文件夹做网站的时候宽高
  • 网站建设重要网站开发兴趣组
  • 源码下载网站有哪些可以做查询功能的网站
  • 建设娱乐网站的要求游戏平台网站制作
  • 建个网站费用上海平台网站建设报
  • 用django做的网站河南旅游集团 网站建设
  • 用zend做饿了么网站电商网站详细设计
  • 网站的第二域名怎么用asp开发网站
  • ps做网站大小网站建设与seo
  • 新网站必须做301定向吗如何批量入侵WordPress站
  • 郑州上海做网站的公司有哪些做网站的管理员咋找
  • 受欢迎的做pc端网站企业管理制度标准范本
  • 如何做网站推广营销美工网站
  • 贵阳建站公司模板微网站开发 付费阅读
  • 雏鸟短视频app软件下载网站拓者设计网
  • wordpress 音乐网站互动营销网站
  • 重庆企业网站设计制作用jquery做的书籍网站
  • 教务管理系统数据库设计百度seo网站优化
  • 无锡网站app微信号js获取网站域名
  • 网站如何做微信分享推广网站建设 app开发网站
  • 东莞企业网站设计排名网站数据库分离怎么做