YUV NV21 转换为 RGB 的困惑

2023-12-10

根据http://developer.android.com/reference/android/graphics/ImageFormat.html#NV21, NV21 是默认使用的格式。

网上有很多关于 YUV NV21 到 RGB 转换的代码。但是,当我查看代码时,我怀疑代码的正确性。

第一个组件 V 应首先出现,然后是第一个组件 U

根据http://wiki.videolan.org/YUV#NV21, NV21 is like NV12, but with U and V order reversed: it starts with V.然而,当我完成代码实现时

  • http://pastebin.com/T0my7zSc- 假设 U 优先
  • https://stackoverflow.com/a/8394202/72437- 它假设 U 也排在第一位
  • https://stackoverflow.com/a/10125048/72437- 看来你也是第一位的

R应该是最重要的位置根据实施int argb in 颜色.java, R 应该位于最重要的位置。但是,我经历了以下代码实现

  • http://pastebin.com/T0my7zSc- 假设 R 处于最不重要的位置
  • https://stackoverflow.com/a/8394202/72437- 假设 R 处于最不重要的位置

我想知道,他们是否犯了常见的错误,或者我忽略了一些事情?

目前,我的实现如下。

public static void YUV_NV21_TO_RGB(int[] argb, byte[] yuv, int width, int height) {
    final int frameSize = width * height;

    final int ii = 0;
    final int ij = 0;
    final int di = +1;
    final int dj = +1;

    int a = 0;
    for (int i = 0, ci = ii; i < height; ++i, ci += di) {
        for (int j = 0, cj = ij; j < width; ++j, cj += dj) {
            int y = (0xff & ((int) yuv[ci * width + cj]));
            int v = (0xff & ((int) yuv[frameSize + (ci >> 1) * width + (cj & ~1) + 0]));
            int u = (0xff & ((int) yuv[frameSize + (ci >> 1) * width + (cj & ~1) + 1]));
            y = y < 16 ? 16 : y;

            int r = (int) (1.164f * (y - 16) + 1.596f * (v - 128));
            int g = (int) (1.164f * (y - 16) - 0.813f * (v - 128) - 0.391f * (u - 128));
            int b = (int) (1.164f * (y - 16) + 2.018f * (u - 128));

            r = r < 0 ? 0 : (r > 255 ? 255 : r);
            g = g < 0 ? 0 : (g > 255 ? 255 : g);
            b = b < 0 ? 0 : (b > 255 ? 255 : b);

            argb[a++] = 0xff000000 | (r << 16) | (g << 8) | b;
        }
    }
}

首先,我对图像编码并不是很有经验(大约一年前对此有一些有限的接触)。所以,请对我的回答持保留态度。

不过,我相信你是对的。我认为在他们的代码中 a) V 和 U 翻转 b) R 和 B 翻转

我有一种感觉,当这两个东西翻转时,会产生与不翻转相同的结果。这就是为什么您可以在很多地方找到错误代码的原因(最初,有人弄错了,然后将其复制到各处,因为生成的代码有效(但是,变量命名不正确))。

这是代码的另一个示例(其工作原理与您的相同):http://www.41post.com/3470/programming/android-retriving-the-camera-preview-as-a-pixel-array

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YUV NV21 转换为 RGB 的困惑 的相关文章

  • 发生存储异常。无法在firebase中上传图片

    在我能够更改图像并将其上传到 firebase 之前 这段代码就可以工作 但现在我突然收到此错误 我不知道问题是什么 public class SettingsActivity extends AppCompatActivity priva
  • 确定是否在已取得 root 权限的设备上运行

    我的应用程序具有某些功能 该功能只能在具有 root 权限的设备上运行 与其让此功能在使用时失败 然后向用户显示适当的错误消息 我更喜欢能够先默默地检查 root 是否可用 如果不可用 则首先隐藏相应的选项 有没有办法做到这一点 这是一个类
  • APK META-INF/library_release.kotlin_module 中复制的重复文件

    我最近通过 JitPack 添加了两个 Android 库 但出现以下错误 Duplicate files copied in APK META INF library release kotlin module 我已经清除了缓存 并尝试使
  • 更改首选项的背景颜色

    我有一个PreferenceCategory xml 文件 我已经在其中定义了所有首选项 我从扩展的类中调用它PreferenceActivity 我无法设置设置屏幕的背景 该屏幕是在如下所示的 xml 文件的帮助下显示的 请看我已经定义了
  • 任务“:app:checkReleaseDuplicateClasses”执行失败

    我的 React Native Android 构建中突然出现构建问题 令人惊讶的是 它是早上建好的 没有做任何改变 但突然就失败了 这就是我得到的错误 知道为什么会发生这种情况吗 在 stack 和 GitHub 中也看到了一些类似的问题
  • 服务在后台运行?

    我正在构建的应用程序的功能之一是记录功能 我通过在服务中启动 MediaRecorder 对象来实现此目的 Intent intent new Intent v getContext RecordService class Messenge
  • 不使用 CookieManager 的 Android 会话 cookie

    我的应用程序进行多次网络调用以获得身份验证 我需要将此会话存储在 cookie 中 我想使用 Cookie Manager 但经过一些研究后 我发现它仅适用于 API 9 及更高版本 并且我的应用程序需要向后兼容 我使用 HTTPURLCo
  • Android 上的硬币识别

    我目前正在开发一个 Android 应用程序 它能够拍摄硬币的现有图像 或者使用内置摄像头扫描单个硬币 非常像 Google Goggles 我正在使用 Android 版 OpenCV 我的问题如下 什么方法最适合使用 OpenCV 在
  • PhoneGap 是应用程序开发的好选择吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 POST 将数据从 Android 发送到 AppEngine Datastore

    抱歉 如果这是一个简单的问题 但我只是不知道我应该做什么 而且我认为我有点超出了我的深度 我想将数据从 Android 应用程序发送到在 Google App Engine 上运行的应用程序 数据必须从那里写入数据存储区 我的数据主要采用对
  • Twitter 集成期间获取访问令牌函数行为不当

    我只是想使用 twitter4j 从我的 Android 应用程序向 Twitter 分享文本 首先 我尝试的是我创建了一个新项目 并且这个特定的代码运行成功 然后我在我的应用程序中混合了该特定代码 登录 Twitter 成功完成 之后我发
  • 用于代码生成的 ANTLR 工具版本 4.7.1 与当前运行时版本 4.5.3 不匹配

    我正在开发一个 Android 应用程序 当前使用 DSL 和一些库 突然构建给了我这个错误 任务 app kaptDebugKotlin 失败 用于代码生成的 ANTLR 工具版本 4 7 1 与当前运行时版本 4 5 3 不匹配 用于解
  • 安卓;在 AdapterViewFlipper 上设置输入/输出动画:未知的动画师名称翻译

    我有一些非常简单的动画 可以与 ViewFlipper 完美配合 但如果我尝试在 AdapterViewFlipper 输入 输出上设置它们 我会收到运行时错误 未知的动画师名称翻译 查看每个方法的相应方法 看起来 ViewFlipper
  • 如何在Firebase Android应用程序中分离两个不同的用户?

    我有一个应用程序 有两种不同类型的用户 一种是教师 第二种是普通用户 如果普通会员登录 他会去normal memberActivity如果他是教师会员 他会去Teacher memberActivity 我如何在登录活动中执行此操作 我的
  • Android框架结构与MFC/Win32结构的比较?

    我为 Android 和 Windows 进行开发 使用 MFC 有时使用 win32 昨天我随意比较了这两个框架 它们显然非常非常不同 因此 Windows 开发与 Android 开发有很大不同 我想知道人们认为 Android 这样的
  • 在Android的activity中调用onResume

    在活动的过程中通过调用 this OnResume 强制 onResume 事件可以吗 或者我应该实现另一个由 OnResume 和第一个成员调用的过程 实现在您的重写中调用的另一个过程onResume 后者不打算由您调用 它是一种方便的方
  • 如果联系人与电话通讯录中的应用程序关联,则显示应用程序图标

    我正在尝试显示与该应用程序关联的电话号码的应用程序图标 我试着跟随this http www c99 org 2010 01 23 writing an android sync provider part 1 链接但是太难了 有没有任何库
  • MPAndroidChart:组合图表

    我在用MPAndroidChart 库 https github com PhilJay MPAndroidChart 我想用CombinedChart创建这样的图表 那可能吗 我尝试了一下 但似乎不起作用 因为 这些条目没有按我的预期工作
  • 找不到资源矢量绘图的异常

    我将在某些设备上运行我的应用程序 其崩溃日志如下 01 04 16 54 02 206 7466 7466 com lawnmowers E AndroidRuntime FATAL EXCEPTION main Process com l
  • 如何使用asynctask显示倒计时的进度条?

    在我的应用程序中 我希望用户按下按钮 然后等待 5 分钟 我知道这听起来很糟糕 但就这样吧 5 分钟等待期间的剩余时间应显示在进度条中 我使用带有文本视图的 CountDownTimer 来倒计时 但我的老板想要看起来更好的东西 这就是进度

随机推荐

  • django-postman扩展了一个不存在的base.html

    我已经安装并配置了django postman基于文档 in urls py在我的项目的根目录中 r messages include postman urls 在设置 py中 INSTALLED APPS django contrib a
  • php - move_uploaded_file - 为什么它很重要?

    我无法想象为什么我应该使用这个函数而不是简单的重命名 手册写道 移动上传文件 该函数检查以确保 filename 指定的文件 是一个有效的上传文件 意味着它是通过 PHP 的 HTTP 上传的 POST 上传机制 如果文件有效 它将被移动到
  • sscanf 函数更改另一个字符串的内容

    我在读取字符串时遇到问题sscanf 我简化了代码以专注于问题 下面是整个代码中的一个函数 它应该打开一个文件并读取一些内容 但sscanf表现得很奇怪 例如我声明一个名为atm与内容 ATOM 之前sscanf它将这个字符串打印为ATOM
  • 如何通过java代码连接sql server?

    我正在创建需要将我的服务连接到 sql server 的应用程序 当我添加依赖后运行测试代码时 它运行成功 这是成功运行的测试代码 import java sql Connection import java sql DatabaseMet
  • MS Access 根据表单值传递

    如何将传递查询分配给依赖于表单中另一个值的行源 本质上我想这样做 SELECT x companyid x companyname x productid FROM x WHERE x CompanyID Forms Reporting C
  • 将 Doctrine 与 Zend Framework 1.8 应用程序集成

    我有兴趣使用 Doctrine 作为我正在编写的新 Zend Framework 应用程序的 ORM 我正在尝试找出尽可能简单地集成它的最佳方法 我发现的每个例子都是不同的 其中很多都早于 ZF 1 8 中新的自动加载功能 他们还没有为我工
  • 在threading.thread中,为什么args在末尾带有逗号[重复]

    这个问题在这里已经有答案了 我正在阅读Python中的多线程 当我进入如下代码时 x threading Thread target thread function args 1 我有点困惑为什么args is 1 最后需要一个逗号 我已经
  • unicode 模式下的 preg_split:delim_capture 不起作用?

    我正在尝试使用正则表达式将一大块中文文本分割成句子 就我的目的而言 句子分隔符是 全角句号 0x3002 全角问号 0xFF1F 全角感叹号 0xFF01 现在 假设我的 str 是这样的 str 你好 你好吗 我是程序员 不太懂这个我问题
  • Reporting Services 2008 - 长子报表导致分页

    类似这个问题 但我有一个 主 报告 其中包含许多子报告 一切都运行良好 直到其中一个子报表在渲染时 例如 PDF 将占据页面上剩余的空间 在这种情况下 分页会导致子报表在新页面上开始 有时 当一个报表仅占用一页上的一点空间 然后由于以下子报
  • 在R中创建二元指示矩阵(布尔矩阵)

    我有一个表明参加会议的数据列表 如下所示 Event Participant ConferenceA John ConferenceA Joe ConferenceA Mary ConferenceB John ConferenceB Te
  • Symfony2:学说:PHPUnit:在单元测试中使用模拟实体管理器刷新期间设置实体 ID

    Symfony 2 8 13 Doctrine ORM 2 5 5 PHPUnit 5 7 5 我想测试一个使用学说实体管理器的类的方法 此公共方法调用一个私有方法来实例化 Bookmark 实体 刷新它并返回该实体 然后 在测试的方法中我
  • 不使用 for-each 旋转 背景颜色

    我正在尝试设置其他每个的背景颜色 tr 我没有使用 for each 循环 因为我使用一些模板来根据节点值过滤数据 tr
  • ASP.NET C# 使用 System.IO 复制目录和子目录

    我需要将整个目录 C X 复制到 C Y X 并且还需要复制子文件夹 有什么方法可以使用 System IO File Directory 命名空间来做到这一点吗 感谢所有帮助者 此类将复制或移动文件夹 无需递归调用 这些方法使用自己的堆栈
  • UTF-8 字符串分隔符

    我正在解析一个二进制协议 其中 UTF 8 字符串散布在原始字节中 此特定协议在每个 UTF 8 字符串前面添加一个短字符 两个字节 指示后续 UTF 8 字符串的长度 这给出了最大字符串长度 2 16 gt 65 000 这对于特定应用来
  • 如何触发特定的Google自定义搜索引擎细化标签?

    目前 我们的组织正在使用 Google 自定义搜索引擎来提供自动建议 并且我们在 CSE 中配置了大约 3 个优化标签 之前 我们使用 WebSearch 和 SearchControl WebSearch 有一个 setSiteRestr
  • QWizard:更改标题字段的高度/尺寸

    我目前正在尝试为我正在开发的 Python Qt 应用程序实现一个简单的 第一步 向导 使用 Designer 确实很容易做到这一点 但与往常一样 问题在于细节 我的问题是 标题 字段对我来说太大了 约占可用屏幕空间的 50 这里有一个截屏
  • 给定表数据的期望输出

    您好 我有一个表测试其结构如下 Testing PK C1 c2 1 v11 v12 2 v21 v23 3 v31 v32 现在我需要查询该表 测试 以便获得以下输出 Pk Key value 1 c1 v11 1 c1 v12 2 c2
  • 泛型类型约束与继承

    这两个函数声明有区别吗 func doSomething
  • 在 C# 中将很长的日期格式解析为 DateTime

    如何将以下字符串日期解析为 C 中的 DateTime 对象 1970 年 1 月 1 日 星期四 这是来自 XML 提要 而 DateTime Parse 似乎不喜欢 en GB 语言环境中的它 该提要仅来自英国服务器 因此我不必担心全球
  • YUV NV21 转换为 RGB 的困惑

    根据http developer android com reference android graphics ImageFormat html NV21 NV21 是默认使用的格式 网上有很多关于 YUV NV21 到 RGB 转换的代码