首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenGL 使用 Shader 实现 RGBA I420(附项目源码)

前面连续写过两篇 shader 实现 RGBA YUV 的文章: OpenGL 使用 shader 实现 RGBA YUYV OpenGL 使用 shader 实现 RGBA NV21...一文掌握 YUV 图像的基本处理 YUV 图像格式详解 Shader 实现 RGBA I420 I420 格式的图像在视频解码中比较常见,像前面文章中提到的,在工程中一般会选择使用 Shader ...RGBA YUV,这样再使用 glReadPixels 读取图像时可以有效降低传输数据量,提升性能,并且兼容性好。...所以,在读取 OpenGL 渲染结果时,先利用 Shader RGBA YUV 然后再进行读取,这种方式非常高效便捷。..., pBuffer); 代码实现 上节我们详细讨论了 Shader 实现 RGBA I420 原理,下面直接贴出几处关键的实现代码。

85140

OpenGL 使用 Shader 实现 RGBA I420(附项目源码)

前面连续写过两篇 shader 实现 RGBA YUV 的文章: OpenGL 使用 shader 实现 RGBA YUYV OpenGL 使用 shader 实现 RGBA NV21 关于...一文掌握 YUV 图像的基本处理 Shader 实现 RGBA I420 I420 格式的图像在视频解码中比较常见,像前面文章中提到的,在工程中一般会选择使用 Shader RGBA YUV...所以,在读取 OpenGL 渲染结果时,先利用 Shader RGBA YUV 然后再进行读取,这种方式非常高效便捷。...当然读取 OpenGL 渲染结果的方式还有很多种,要视具体的需求和使用场景而定,具体可以参考文章:OpenGL 渲染图像读取哪家强?..., pBuffer); 代码实现 [a0990c8fgw1f3x2nnyedig20i009kkjo.gif] 上节我们详细讨论了 Shader 实现 RGBA I420 原理,下面直接贴出几处关键的实现代码

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

面试官:请使用 OpenGL ES RGB 图像转换为 YUV 格式。我 ……

YUV RGB 这一节先做个铺垫简单介绍下 YUV RGB 实现,在前面的文章中曾经介绍过 OpenGL 实现 YUV 的渲染,实际上就是利用 shader 实现了 YUV(NV21) 到 RGBA...前面小节已经提到,先说下一个简单的思路: 先将 RGBA 按照公式转换为 YUV 如(YUYV),然后 YUYV 按照 RGBA 进行排布,最后使用 glReadPixels 读取 YUYV 数据,由于...shader 实现 RGB YUV 原理图 我们要将 RGBA 转成 YUYV,数据量相比于 RGBA 少了一半,这就相当于两个像素点合并成一个像素点。...如图所示,我们在 shader 中执行两次采样,RGBA 像素(R0,G0,B0,A0)转换为(Y0,U0,V0),像素(R1,G1,B1,A1)转换为(Y1),然后组合成(Y0,U0,Y1,V0),这样...8 个字节表示的 2 个 RGBA 像素就转换为 4 个字节表示的 2 个 YUYV 像素。

5K41

使用 OpenGL 实现 RGB 到 YUV 的图像格式转换

YUV RGB 这一节先做个铺垫简单介绍下 YUV RGB 实现,在前面的文章中曾经介绍过 OpenGL 实现 YUV 的渲染,实际上就是利用 shader 实现了 YUV(NV21) 到 RGBA...前面小节已经提到,先说下一个简单的思路:先将 RGBA 按照公式转换为 YUV 如(YUYV),然后 YUYV 按照 RGBA 进行排布,最后使用 glReadPixels 读取 YUYV 数据,由于...YUV 原理图: [shader 实现 RGB YUV 原理图] 我们要将 RGBA 转成 YUYV,数据量相比于 RGBA 少了一半,这就相当于两个像素点合并成一个像素点。...如图所示,我们在 shader 中执行两次采样,RGBA 像素(R0,G0,B0,A0)转换为(Y0,U0,V0),像素(R1,G1,B1,A1)转换为(Y1),然后组合成(Y0,U0,Y1,V0),这样...8 个字节表示的 2 个 RGBA 像素就转换为 4 个字节表示的 2 个 YUYV 像素。

7K51

LLM2Vec介绍和Llama 3换为嵌入模型代码示例

但是这篇论文LLM2Vec,可以任何的LLM转换为文本嵌入模型,这样我们就可以直接使用现有的大语言模型的信息进行RAG了。...嵌入模型和生成模型 嵌入模型主要用于文本数据转换为数值形式的向量表示,这些向量能够捕捉单词、短语或整个文档的语义信息。...在论文中对encoder-only和decoder-only模型的特点进行了讨论,特别是在解释为什么decoder-only的大型语言模型(LLM)转换为有效的文本编码器时。...LLM2Vec 在论文中提出了一种名为LLM2Vec的方法,用于仅解码器的大型语言模型(LLM)转换为强大的文本编码器。...利用LLM2VecLlama 3化为文本嵌入模型 首先我们安装依赖 pip install llm2vec pip install flash-attn --no-build-isolation

27910

GLSL ES 语言—变量数值类型

不能以 gl、webgl 或 webgl 开头,这些已经被OpenGL ES 保留了。 不能是 GLSL ES 中的关键字和保留字,但你的变量的一份可以是它们。...我们可以使用内置函数 float() 整型数转换为浮点数,如下所示: int i = 0; float f1 = float(i); float f2 = float(8); GLSL ES 类型转换内置函数...: 转换 函数 描述 转换为整型数 int(float) 去掉浮点数小数部分,转换为整型数 int(bool) true 转换为1,false 转换为0 转换为浮点点 float(int) 整型数转换为浮点数...float(bool) true 转换为1.0,false转换为0.0 转换为布尔值 bool(int) 0换为false,非0换为true bool(float) 0.0 转换为false,...非0换为 true 运算符 GLSL ES 支持运算类型如下: 类别 GLSL ES 数据类型 描述 - 取负 int 或 float * 乘法 int 或 float,运算的返回值类型与参与运算的值类型相同

3K20

OpenGL (一)--基于pod的OpenGL环境配置OpenGL (一)--基于pod的OpenGL环境配置

基于pod的OpenGL环境配置 依赖准备 ---- 所需依赖: CLTools glew libGLTools.a OpenGL.framework、GLUT.framework(这部分依赖于系统动态库...) 导入方式: 使用pod方式导入,我已经准备所需依赖文件上传网盘,可自行下载, ?...工程创建 ---- 首先需要明确的是OpenGL是基于Mac端的,所以创建的Demo也得是MacOS 当然也有基于iOS的OpenGL ES,环境配置后续放出。 ?...使用pod install 无用文件删除,并创建main.cpp文件,也可以main.m直接改为main.cpp ?...//清除一个或一组特定的缓冲区 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); //设置一组浮点数来表示红色

1.4K20

OpenGL: 如何利用 Shader 实现 RGBA 到 NV21 图像格式转换?(全网首次开源)

之前写过一篇 OpenGL 使用 shader 实现 RGBA YUYV 的文章,有几位读者大人在后台建议写一篇 shader 实现 RGBA NV21 的文章,因为在实践中 NV21 格式用的比较多...一文掌握 YUV 图像的基本处理 10bit YUV(P010)的存储结构和处理 Shader 实现 RGBA NV21 好处 OpenGL 完成图像的渲染后,很多情况下需要将渲染后的图像读取到内存进行下一步处理...在不涉及超大图像读取时,我们一般会选择使用 Shader RGBA YUV,这样再使用 glReadPixels 读取图像时可以有效降低传输数据量,提升性能。...Shader 实现 RGBA NV21 原理 对 NV21 格式比较熟悉的同学应该非常了解,NV21 有两个平面(plane), 一个 plane 存储 Y 分量,另一个 plane 存储依次交错排列的..., pBuffer); 代码实现 上节我们详细讨论了 Shader 实现 RGBA NV21 原理,下面直接贴出几处关键的实现代码。

2.2K51

小白白也能学会的 PyQt 教程 —— 图像类及图像相关基础类介绍

它可以加载各种图像文件,并将其转换为QImage或QPixmap对象。QImageWriter:用于图像写入不同格式的图像文件的类。它可以QImage或QPixmap对象保存为各种图像文件。...QOpenGLWidget:用于在GUI应用程序中显示OpenGL渲染的图形的类。它提供了与OpenGL集成的功能,可以显示和交互3D图形。...() # QBitmap 转换为 QImageQBrush 转换为 QPixmap:brush = QBrush(Qt.SolidPattern) # 创建一个 QBrush 对象pixmap...= QColor(pixel).getRgb() # 转换为 RGBA 值 array[y, x] = rgba # RGBA 值存入 numpy 数组numpy 数组转换为 QImage...= QImage(array.data, 100, 100, QImage.Format_RGBA8888) # numpy 数组转换为 QImage这些示例展示了如何在 QImage 和 numpy

2.7K40

第3章-图形处理单元-3.3-可编程着色器阶段

着色器使用类似C的着色语言进行编程,例如DirectX的高级着色语言(HLSL)和OpenGL着色语言 (GLSL)。...该中间语言由驱动程序转换为特定GPU的ISA。控制台编程通常会避免中间语言步骤,因为系统只有一个ISA。...在现代 GPU上,本机也支持32位整数和64位浮点数。浮点向量通常包含位置(xyzw)、法线、矩阵行、颜色(rgba)或纹理坐标 (uvwq)等数据。整数最常用于表示计数器、索引或位掩码。...例如,像素着色器可以光源的颜色作为统一(uniform)值提供,并且三角形表面的位置每个像素都会发生变化,因此也会发生变化。...还存在用于更复杂操作的函数,例如向量归一化和反射、叉积以及矩阵置和行列式计算。 “流控制”这个术语是指使用分支指令来改变代码执行的流程。

94820
领券