QImage与AVFrame互转

未验证,仅供参考,此方法感觉不是很好

先是AVFrame转QImage

#pragma execution_character_set("utf-8")static int decode_write_frame(AVCodecContext *avctx, AVFrame *frame, int *frame_count, AVPacket *pkt, int last)
{int len, got_frame;char buf[1024];len = avcodec_decode_video2(avctx, frame, &got_frame, pkt);if (len < 0) {printf("Error while decoding frame %d\n", *frame_count);return len;}if (got_frame) {printf("Saving frame %3d\n", *frame_count);QImage image(QSize(avctx->width, avctx->height), QImage::Format_RGB888);for(int h = 0; h < avctx->height; h++){for(int w = 0; w < avctx->width; w ++){int hh = h >> 1;int ww = w >> 1;int Y = frame->data[0][h * frame->linesize[0] + w];int U = frame->data[1][hh * (frame->linesize[1]) + ww];int V = frame->data[2][hh * (frame->linesize[2]) + ww];int C = Y - 16;int D = U - 128;int E = V - 128;int r = 298 * C           + 409 * E + 128;int g = 298 * C - 100 * D - 208 * E + 128;int b = 298 * C + 516 * D           + 128;r = qBound(0, r >> 8, 255);g = qBound(0, g >> 8, 255);b = qBound(0, b >> 8, 255);r = qBound(0, r, 255);g = qBound(0, g, 255);b = qBound(0, b, 255);QRgb rgb = qRgb(r, g, b);image.setPixel(QPoint(w, h), rgb);}}QString fname = QString("img") + QString::number(*frame_count) + ".jpg";image.save(fname);//pgm_save(frame->data[0], frame->linesize[0], avctx->width, avctx->height, buf);(*frame_count)++;}if (pkt->data) {pkt->size -= len;pkt->data += len;}return 0;
}

然后是QImage转AVFrame

#pragma execution_character_set("utf-8")QImage image = QPixmap::grabWindow(QApplication::desktop()->winId()).toImage();image = image.scaled(QSize(resize_width, resize_height));av_init_packet(pkt);pkt->data = NULL;    // packet data will be allocated by the encoderpkt->size = 0;for (int h = 0; h < context->height; h++){for (int w = 0; w < context->width; w++){QRgb rgb = image.pixel(w, h);int r = qRed(rgb);int g = qGreen(rgb);int b = qBlue(rgb);int dy = ((66*r + 129*g + 25*b) >> 8) + 16;int du = ((-38*r + -74*g + 112*b) >> 8) + 128;int dv = ((112*r + -94*g + -18*b) >> 8) + 128;uchar yy = (uchar)dy;uchar uu = (uchar)du;uchar vv = (uchar)dv;frame->data[0][h * frame->linesize[0] + w] = yy;if(h % 2 == 0 && w % 2 == 0){frame->data[1][h/2 * (frame->linesize[1]) + w/2] = uu;frame->data[2][h/2 * (frame->linesize[2]) + w/2] = vv;}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基础算法——二维前缀和

二维前缀和 我们先前已经了解了前缀和思想&#xff0c;二维前缀和感觉上就是一维前缀和的进阶&#xff0c;下面 &#xff0c;我们剖析一下两种前缀和。 一维前缀和 一维前缀和的核心就是这两个公式&#xff0c;二维前缀和也差不多的嘞 下面我们来推理一下二维前缀和 已知&a…

PySPARK带多组参数和标签的SparkSQL批量数据导出到S3的程序

设计一个基于多个带标签SparkSQL模板作为配置文件和多组参数的PySPARK代码程序&#xff0c;实现根据不同的输入参数自动批量地将数据导出为Parquet、CSV和Excel文件到S3上&#xff0c;标签和多个参数&#xff08;以“_”分割&#xff09;为组成导出数据文件名&#xff0c;文件已…

如何安装LangChain软件包

前言 LangChain是一个强大的框架&#xff0c;用于构建使用大型语言模型&#xff08;LLMs&#xff09;的应用程序。它提供了一系列软件包和工具&#xff0c;帮助开发人员将LLMs集成到他们的工作流程中。然而&#xff0c;由于其模块化设计&#xff0c;LangChain生态系统可能会让…

每日Attention学习19——Convolutional Multi-Focal Attention

每日Attention学习19——Convolutional Multi-Focal Attention 模块出处 [ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation 模块名称 Convolutional Multi-Focal Atte…

2. K8S集群架构及主机准备

本次集群部署主机分布K8S集群主机配置主机静态IP设置主机名解析ipvs管理工具安装及模块加载主机系统升级主机间免密登录配置主机基础配置完后最好做个快照备份 2台负载均衡器 Haproxy高可用keepalived3台k8s master节点5台工作节点(至少2及以上)本次集群部署主机分布 K8S集群主…

游戏引擎学习第89天

回顾 由于一直没有渲染器&#xff0c;终于决定开始动手做一个渲染器&#xff0c;虽然开始时并不确定该如何进行&#xff0c;但一旦开始做&#xff0c;发现这其实是正确的决定。因此&#xff0c;接下来可能会花一到两周的时间来编写渲染器&#xff0c;甚至可能更长时间&#xf…

nuxt3中使用useFetch请求刷新不返回数据或返回html结构问题解决-完整nuxt3useFetchtch请求封装

前言 如果使用nuxt3写项目&#xff0c;可以查看nuxt3实战&#xff1a;完整的 nuxt3 vue3 项目创建与useFetch请求封装&#xff0c;此篇内容有详细步骤 但在此篇内容中useFetch请求在页面有多个请求的情况下&#xff0c;或者放在客户端渲染情境下是失败的&#xff0c;所以在此篇…

链式结构二叉树(递归暴力美学)

文章目录 1. 链式结构二叉树1.1 二叉树创建 2. 前中后序遍历2.1 遍历规则2.2 代码实现图文理解 3. 结点个数以及高度等二叉树结点个数正确做法&#xff1a; 4. 层序遍历5. 判断是否完全二叉树 1. 链式结构二叉树 完成了顺序结构二叉树的代码实现&#xff0c;可以知道其底层结构…

JS:将JS对象格式化为php语法形式(完美支持无unicode编码匹配的正则)

/*** 格式化Object数据为php语法形式* param {*} obj 任意数据* param {String} spaceLen 缩略符长度&#xff1a;必须在2~65536之间&#xff0c;否则默认为2* return {String} 格式化后的PHP语法字符串*/ function formatToPhp(obj, spaceLen) {formatToPhp function (obj, s…

Kubernetes 中 BGP 与二层网络的较量:究竟孰轻孰重?

如果你曾搭建过Kubernetes集群,就会知道网络配置是一个很容易让人深陷其中的领域。在负载均衡器、服务通告和IP管理之间,你要同时应对许多变动的因素。对于许多配置而言,使用二层(L2)网络就完全能满足需求。但边界网关协议(BGP)—— 支撑互联网运行的技术 —— 也逐渐出…

Linux提权--John碰撞密码提权

​John the Ripper​&#xff08;简称 John&#xff09;是一个常用的密码破解工具&#xff0c;可以通过暴力破解、字典攻击、规则攻击等方式&#xff0c;尝试猜解用户密码。密码的弱度是提权攻击中的一个重要因素&#xff0c;如果某个用户的密码非常简单或是默认密码&#xff0…

大数据学习之Spark分布式计算框架RDD、内核进阶

一.RDD 28.RDD_为什么需要RDD 29.RDD_定义 30.RDD_五大特性总述 31.RDD_五大特性1 32.RDD_五大特性2 33.RDD_五大特性3 34.RDD_五大特性4 35.RDD_五大特性5 36.RDD_五大特性总结 37.RDD_创建概述 38.RDD_并行化创建 演示代码&#xff1a; // 获取当前 RDD 的分区数 Since ( …

[创业之路-286]:《产品开发管理-方法.流程.工具 》-1- IPD两个跨职能团队的组织

IPD&#xff08;集成产品开发&#xff09;中的两个重要跨职能组织是IPMT&#xff08;集成产品管理团队&#xff09;和PDT&#xff08;产品开发团队&#xff09;。 在IPD&#xff08;集成产品开发&#xff09;体系中&#xff0c;IRB&#xff08;投资评审委员会&#xff09;、IPM…

maven详细讲解

学习目标 那什么是mavenmaven概念以及核心思想maven构建的生命周期、阶段以及目标maven仓库有哪些&#xff1f;maven依赖 那什么是maven&#xff1f;maven概念以及核心思想&#xff0c;maven构建的生命周期、阶段以及目标&#xff1f; 那什么是maven Maven是一个项目管理和构建…

DeepSeek 提示词之角色扮演的使用技巧

老六哥的小提示&#xff1a;我们可能不会被AI轻易淘汰&#xff0c;但是会被“会使用AI的人”淘汰。 在DeepSeek的官方提示库中&#xff0c;有“角色扮演&#xff08;自定义人设&#xff09;”的提示词案例。截图如下&#xff1a; 在“角色扮演”的提示词案例中&#xff0c;其实…

第二个Qt开发实例:在Qt中利用GPIO子系统和sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口(效果为LED2灯的灭和亮)

引言 本文承接博文 https://blog.csdn.net/wenhao_ir/article/details/145420998 里的代码&#xff0c;在那里面代码的基础上添加上利用sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口的代码&#xff0c;进而实现LED2灯的灭和亮。 最终的效果是点击下面的LED按钮实现LED…

登山第十七梯:矩形拟合——无惧噪声

文章目录 一 摘要 二 资源 三 内容 (文章末尾提供源代码) 一 摘要 目前,获取点集的矩形拟合结果的主要方法是计算其最小外包直立矩形或者旋转矩形。这些方法简单、易用,在数据质量良好的情况下能够较好的贴合矩形形状。然而,在数据缺失时,最小外包围盒方法将会…

57. Uboot图形化界面配置

一、Uboot图形化配置方法 1、通过终端配置。 2、进入到uboot的源码根目录下。 3、首先默认配置 make mx6ull_alientek_emmc_defconfig //默认配置 4、输入make menuconfig。打开图形化配置界面。 5、注意&#xff0c;新电脑需要安装ncurses库。sudo apt-get install libncurs…

Java面试场景题分享

假设你在做电商秒杀活动&#xff0c;秒杀开始时&#xff0c;成千上万的用户同时请求抢购商品。你会如何设计系统来处理这些请求&#xff0c;确保库存不超卖 你如何保证库存的准确性&#xff1f; 这个问题引导你思考如何在高并发下确保库存更新的原子性&#xff0c;最直接的方式…

kalman滤波器C++设计仿真实例第三篇

1. 仿真场景 水面上有条船在做匀速直线航行&#xff0c;航行过程中由于风和浪的影响&#xff0c;会有些随机的干扰&#xff0c;也就是会有些随机的加速度作用在船身上&#xff0c;这个随机加速度的均方差大约是0.1&#xff0c;也就是说方差是0.01。船上搭载GPS设备&#xff0c;…