从android相机的NV21格式中提取黑白图像

2023-12-26

我已经做了一些谷歌搜索,但找不到有关此格式的足够信息。它是相机预览的默认格式。任何人都可以建议有关它的良好信息来源以及如何从具有该格式的照片/预览图像中提取数据吗?更具体地说,我需要提取黑白图像。

编辑:似乎该格式也称为 YCbCr 420 半平面


我开发了以下代码将 NV21 转换为 RGB,并且它正在工作。

/**
 * Converts YUV420 NV21 to RGB8888
 * 
 * @param data byte array on YUV420 NV21 format.
 * @param width pixels width
 * @param height pixels height
 * @return a RGB8888 pixels int array. Where each int is a pixels ARGB. 
 */
public static int[] convertYUV420_NV21toRGB8888(byte [] data, int width, int height) {
    int size = width*height;
    int offset = size;
    int[] pixels = new int[size];
    int u, v, y1, y2, y3, y4;

    // i percorre os Y and the final pixels
    // k percorre os pixles U e V
    for(int i=0, k=0; i < size; i+=2, k+=2) {
        y1 = data[i  ]&0xff;
        y2 = data[i+1]&0xff;
        y3 = data[width+i  ]&0xff;
        y4 = data[width+i+1]&0xff;

        u = data[offset+k  ]&0xff;
        v = data[offset+k+1]&0xff;
        u = u-128;
        v = v-128;

        pixels[i  ] = convertYUVtoRGB(y1, u, v);
        pixels[i+1] = convertYUVtoRGB(y2, u, v);
        pixels[width+i  ] = convertYUVtoRGB(y3, u, v);
        pixels[width+i+1] = convertYUVtoRGB(y4, u, v);

        if (i!=0 && (i+2)%width==0)
            i+=width;
    }

    return pixels;
}

private static int convertYUVtoRGB(int y, int u, int v) {
    int r,g,b;

    r = y + (int)(1.402f*v);
    g = y - (int)(0.344f*u +0.714f*v);
    b = y + (int)(1.772f*u);
    r = r>255? 255 : r<0 ? 0 : r;
    g = g>255? 255 : g<0 ? 0 : g;
    b = b>255? 255 : b<0 ? 0 : b;
    return 0xff000000 | (b<<16) | (g<<8) | r;
}

This image helps to understand. YUV420 NV21

如果你只想灰度图像更容易。您可以丢弃所有 U 和 V 信息,而仅获取 Y 信息。代码可以是这样的:

/**
 * Converts YUV420 NV21 to Y888 (RGB8888). The grayscale image still holds 3 bytes on the pixel.
 * 
 * @param pixels output array with the converted array o grayscale pixels
 * @param data byte array on YUV420 NV21 format.
 * @param width pixels width
 * @param height pixels height
 */
public static void applyGrayScale(int [] pixels, byte [] data, int width, int height) {
    int p;
    int size = width*height;
    for(int i = 0; i < size; i++) {
        p = data[i] & 0xFF;
        pixels[i] = 0xff000000 | p<<16 | p<<8 | p;
    }
}

要创建位图只需:

Bitmap bm = Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888);

其中pixels是你的int[]数组。

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

从android相机的NV21格式中提取黑白图像 的相关文章

  • Android 6 getAccountName() 缺少 android.permission.GET_ACCOUNTS

    在 Android 6 设备上运行时出现以下异常 java lang SecurityException Missing android permission GET ACCOUNTS 这看起来像是一个相当简单的例外 但对我来说并非如此 我
  • 无法运行 android/sdk/build-tools/23.0.2/aapt

    最近在 Ubuntu 15 上安装了 Android Studio 1 0 1 由于某些原因是旧版本 我正在尝试创建一个新项目 每当我构建它时 我都会收到此错误 无法运行程序 home user Android Sdk build tool
  • Android 中的 JDBC 连接

    有没有人在 android 中尝试过 JDBC 连接 因为在 Android 2 3 中支持 JDBC 我必须在没有 Web 服务的情况下连接 Mysql 我已经提出申请 但它给了我错误 public class MysqlConnect
  • Orientation改变时如何处理Activity?

    我正在编写一个活动 它从服务器加载数据并使用 ArrayAdapter 将其显示为列表 为此 我显示了一个进度对话框 即加载 同时它从服务器加载所有数据 然后我在处理程序中关闭该对话框 我的问题是 当我更改方向时 会再次显示进度对话框 这是
  • Flutter - 当用户移动到其他(预览)屏幕时如何正确暂停相机?

    我需要pause当我移动到导航树上的另一个屏幕以节省电池和性能时相机 我尝试过了dispose cameraController 但 flutter 从另一个屏幕返回时不会重新初始化状态 但这很明显 我使用相机的主要代码 override
  • 如何在datepickerdialog android中选择年份?

    我是 Android 编程新手 请帮忙 我正在使用创建材料设计的片段DatePickerDialog点击EditText 问题是它设置为当前日期 由我设置 但是 如果用户必须选择过去的日期 比如说 10 年前 用户必须每月滚动 这是痛苦的
  • 我应该将 onClickListener 放在自定义 ListView 的哪里?

    我正在定制ListView包含 a 的行数CheckBox and a TextView 在我使用自定义之前ListViews使用 SimpleCursorAdapter 我的onListItemClick 工作得很好 我读过我必须添加一个
  • Android:自动从项目包中删除未使用的图像

    我正在开发一个相当大的android项目 并且在drawable文件夹中有很多图像 其中许多图像未在项目中使用 因为它们已被替换 并且占用了宝贵的空间 有什么方法可以自动找到这些图像并删除它们 而不是搜索项目中的每个图像 我使用过的一些工具
  • 在另一个 Intent 中发送 Intent

    也许我的处理方式是错误的 但我想在我自己的应用程序中响应我的 Android AppWidget 的点击事件并启动一个 Activity 当时我设置了PendingIntent我还有一个Intent我想在点击时启动它 我的onStartCo
  • 自定义 ListView 具有不同的行布局,根据 Web 服务响应进行扩展

    我有列表视图 我有3组观点 图像视图 视频查看 文本视图 我有一个返回图像 视频和文本的网络服务器 因此 根据服务器的响应 我想膨胀列表视图中行的视图 我知道使用自定义适配器来扩展自定义布局 我想知道如何使用自定义适配器来扩充视图类型 例如
  • 推送通知需要很长时间才能到达

    我在适用于 iOS 和 Android 的 Adob e Air 应用程序中遇到推送通知的奇怪问题 我正在使用 Milkman Games 的 Easy Push ANE 以及 One Signal 服务 问题是通知确实会到达 但有时 随机
  • 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.ownText()”

    我正在使用下面的代码来获取版本名称 from 应用商店通过使用 jsoup 我正在获取详细信息 但它引发了一些异常 我的代码是 public class ForceUpdateAsync extends AsyncTask
  • ViewPager 的 Android Viewholder

    您好 我正在使用 ViewPager 但我现在想保留状态 而不是重新生成单元格 我注意到 viewpager 与 listviews 的自定义适配器非常相似 它们的功能类似 listview 在单元格不再出现在屏幕上后重新生成单元格中的数据
  • 将 espresso 与自定义 EditText 结合使用

    这是我的布局的一部分
  • Android 方向传感器的替代品是什么?

    大家好 我正在为 Android 构建 3D 游戏 我目前正在尝试在我的游戏中添加一个传感器 允许玩家倾斜机器人作为其控制 理想情况下 我想使用方向传感器 但我注意到它已被弃用 有谁知道如何检测 Android 中的倾斜并且不使用这个传感器
  • 如何在Android中显示进度对话框?

    我想展示ProgressDialog当我单击 登录 按钮时 需要一些时间才能移动到另一个页面 我怎样才能做到这一点 ProgressDialog pd new ProgressDialog yourActivity this pd setM
  • C/C++ 通过 Android NDK 在 JNI 中看不到 Java 方法

    我正在尝试从使用 NDK 构建的 C 类文件调用 Java 方法 它不断抛出常见的 未找到非静态方法 错误并导致整个 Android 应用程序崩溃 下面的代码片段 有些东西可能不需要 但我按原样保留它们 因为焦点 问题在于refreshJN
  • Eclipse:缺少 Java 构建路径

    我正在尝试使用 Eclipse 来使用适用于 Android 的 Google SDK 教程 我能够让前两个项目正常工作 但是当运行第三个 R java 时消失了 所以我放弃了 我根据练习 3 的解决方案集制作了一个全新的包 它充满了错误
  • 如何为 Android Q 打开具有特定专辑或文件夹的默认图库应用程序?

    我尝试打开图库中的特定文件夹 如下代码所示 但它对我不起作用 并且出现错误无法找到物品 fun openDirectoryInGallery context Context directory String val intent Inten
  • 我可以在 Android Market 上出售我的 SL4A 应用程序吗?

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用 SL4A 在 Android 上使用 Python 开发一个应用程序 并且我想知道是否可以将其作为应用程序在 Android Market

随机推荐

  • 通过传递纬度和经度打开 Apple 地图

    当用户单击链接时 我尝试在 PhoneGap 应用程序中打开 Apple 地图 Apple文档中的URL方案是这样的http maps apple com maps ll 51 83733 8 3016 如果存在 Apple 地图 则会打开
  • 如何将 dzi 文件转换为多瓦金字塔 tiff 格式

    参考答案 如何将 dzi 深度变焦 文件转换为完整图像 https stackoverflow com questions 53986084 how to convert dzi deep zoom files to full image
  • 静态函数的 DLL 导出

    我有以下静态函数 static inline HandVal StdDeck StdRules EVAL N StdDeck CardMask cards int n cards 我可以将此函数导出到 DLL 中吗 如果是这样 怎么办 Th
  • 在列表理解或生成器表达式中使用 while

    我可以用if and for在列表推导式 生成器表达式中为 list i for i in range 100 if i i lt 30 我知道这不是最有效的 但请耐心等待 因为情况可能要复杂得多 这只是一个例子 然而 这仍然会经历数百次迭
  • 复制 php 变量对性能的影响

    只是想知道复制非常大的 php 变量对性能的影响 例如 arr 是一个巨大的数组 如果我这样做 arr2 arr 这是一个深拷贝还是 arr2 只是像 Java 中那样指向 arr 的指针 提前致谢 arr2 arr创建深层副本 但实际的复
  • Switch 语句始终包含 case 和 default

    当我编译这个程序时 它输出相应的 switch case 和默认标签内容 它唯一不打印的值是一月 任何帮助都会很棒 样本输入 4 示例输出 四月 错误 虽然我可以让程序变得更好 但我需要以这种特定的方式来实现 while month EOF
  • 什么时候使用“require-dev”?什么是常见的开发依赖项?

    虽然我熟悉了基础知识composer json并指定下的依赖关系requirekey我还不太明白其目的require dev Composer 的文档指出 要求开发 仅限 root http getcomposer org doc 04 s
  • XACML 义务

    我们如何使用 XACML 中的义务 任何参考都会有帮助 这种情况是义务应提交 PIP 并将结果返回给 PEP Thanks 作者评论中的示例
  • 关于新的 EF5 自动编译查询功能

    我对新的 EF5 自动编译查询功能进行了一些测试 问题是我没有看到性能有任何差异 我使用 NET 4 0 和 EF4 0 制作了一个项目 但没有使用编译查询 我使用 NET 4 0 和 EF4 0 制作了另一个带有编译查询的项目 性能提高了
  • “位置:绝对”与 Flexbox 冲突吗?

    我想做一个div粘在屏幕顶部 不影响其他元素 其子元素位于中间 parent display flex justify content center position absolute div class parent div class
  • Android 自定义带有文本的后退按钮

    我希望在我的 Android 应用程序中有一个像我在 iOS 应用程序中那样的操作栏 不幸的是 我不知道如何制作仅包含文本的后退按钮以及如何将标题移动到中心 这将适用于整个应用程序 而不仅仅是一种布局 有人可以帮我吗 我找到了一个简单的解决
  • 使两个输入具有相同的数据值?

    我有两个输入 数字 如何将数据从第一个复制到第二个并返回 例如 我将在第一个输入中设置一些值 在第二个输入中设置相同的值 如果我在第二个输入中设置相同的值 我希望在第一个输入中获取相同的值 我想一定是这样的 div class first
  • 使用 Python 的三元运算符与 lambda 组合的意外输出

    我有一个特定的情况 我想执行以下操作 实际上比这更复杂 但我将问题简化为本质 gt gt gt lambda e 1 0 if lambda e True 0 else lambda e 2 0 True 这是一种困难的写作方式 gt gt
  • 关闭旧套接字后创建新套接字会导致连接被拒绝

    我是 android 编程新手 我正在尝试将程序从标准 java 移植到 android 这个java应用程序包含套接字 当我移植程序时 如果按下按钮太快 就会出现连接被拒绝的情况 我编写了一个简单的程序进行测试 Thread thread
  • Angular2 NgFor 在表达式中绑定数组

    ngfor 循环中使用的数组 当它更新时 如何让 Angular2 重新运行该表达式 目前它不会输出任何内容 因为它在开始时使用空数组运行 一旦更新 数组已更改 ngfor表达式就不会重新运行 这是所需的功能 这是怎么做到的 例如在 HTM
  • 如何在javascript中调用同一函数内部和外部的函数

    我想在同一个函数内部和外部调用一个函数 在 JavaScript 中是如何实现的 Js someFunction function repeat result document body innerHTML br result winner
  • VB6中使用CDO/SMTP/TLS发送邮件 smtp.office365.com邮件服务器

    我花了几天时间寻找如何在 VB6 应用程序中设置 Office365 SMTP 服务器 我的代码可以在端口 465 和其他邮件服务器上正常工作 但它不适用于端口 587 和 smtp office365 com 有什么办法可以在 VB6 中
  • WebView 中的 Flash 视频无法在沙盒应用程序中运行

    我在应用程序中播放 Flash 视频时遇到问题 它以前一直有效 但自从 Apple 要求每个开发人员启用权利和沙箱以来 Web 视图中的 Flash 视频就无法播放 每次我禁用沙箱时 它都会起作用 但如果启用沙箱 则不会 下面我发布了沙盒和
  • 如何将系统属性传递给 Gradle 任务

    我正在使用 Gradlespring boot插件 我需要选择一个 spring 活动配置文件来进行测试运行 我该如何通过spring profiles active系统属性到bootRun插件的任务 已经失败的事情 task bootRu
  • 从android相机的NV21格式中提取黑白图像

    我已经做了一些谷歌搜索 但找不到有关此格式的足够信息 它是相机预览的默认格式 任何人都可以建议有关它的良好信息来源以及如何从具有该格式的照片 预览图像中提取数据吗 更具体地说 我需要提取黑白图像 编辑 似乎该格式也称为 YCbCr 420