将 YUV 作为字节数组导入

2024-01-01

我正在开发一个项目,必须对 YUV420_SP_NV21 图像(从 Android 相机拍摄)应用阈值,以确定哪些像素是“黑色”,哪些像素是“白色”。

因此,我想将其作为字节数组导入 Python 中(使用 OpenCV、NumPy、PIL...),这样我就可以对 Y 值进行一些快速的按位运算。



但是,当我尝试使用以下方法导入图像时,我得到无用的输出:

当我打字时

import cv2
import numpy as np

img = cv2.imread('test.yuv')
imgArr = np.array(img)

print(img)
print(imgArr)

我得到的输出:

None
None



当我打字时

import numpy as np

f = open('test.yuv', 'rb')
img = f.read()
imgArr = np.array(img)

我得到一些无用的字符序列。
当我现在输入时(例如)

print(imgArr[0])

我得到的输出:

IndexError: too many indices for array

这意味着 imgArr 根本不是数组!



谁能告诉我我做错了什么吗? 提前致谢!


您确实应该提供一个示例图像,以便人们可以更好地帮助您 - 否则他们会花费大量时间为他们猜测的图像格式开发代码,如果他们猜错了,那就是浪费精力。

假设您的数据如下所示维基百科 https://en.wikipedia.org/wiki/YUV,您可以看到所有 Y 样本都排在前面,然后是所有 U 样本和所有 V 样本。然而,U/V 样本的数量仅为 Y 样本的 1/4,因为这两个分量在水平和垂直方向上均以 2:1 的比例进行二次采样:

所以,想法是读入整组 YUV 样本,然后取出第一个w*h字节作为 Y 值,下一个w*h/4样本为 U 和下一个w*h/4样本为V:

import numpy as np

# Guess a width and height and derive number of pixels in image
w,h = 2048,1536
px = w*h

# Read entire file into YUV
YUV = np.fromfile('NV21_2048x1536.yuv',dtype='uint8')

# Take first h x w samples and reshape as Y channel
Y = YUV[0:w*h].reshape(h,w)

# Take next px/4 samples as U
U = YUV[px:(px*5)//4].reshape(h//2,w//2)

# Take next px/4 samples as V
V = YUV[(px*5)//4:(px*6)//4].reshape(h//2,w//2)

# Undo subsampling of U and V by doubling height and width
Ufull = U.copy().resize((w,h))
Vfull = V.copy().resize((w,h))

我不知道你下一步打算做什么,所以我暂时就这样吧!


Keywords:NV21、YUV、YUV420、Android、YUV430P、Pillow、PIL、Python、图像、图像处理。

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

将 YUV 作为字节数组导入 的相关文章

随机推荐

  • Google Now 类似于 iOS 上的界面

    所以 我非常喜欢 Android 上的 Google Now 卡片界面 最近它甚至登陆了 iOS 有没有任何教程或示例项目可以帮助我为我的 iOS 应用程序创建卡片界面 根据我的研究 我已经能够使用自定义 UICollectionViewF
  • Twitter Bootstrap:中心药丸

    我的问题是如何使药片居中 我尝试在周围添加中心块并更改float left to float center但没有任何帮助 这已经变得简单多了 你只需要使用text center容器上的类 并应用display inline block to
  • 致命异常:主要 - 我的应用程序不再在 Android 设备上运行,但可以在桌面上运行

    这是我第一次遇到这个问题 我完全不知道该怎么办 我曾经在虚拟设备以及手机和平板电脑上测试我的应用程序 我经常测试它 比如每 1 2 小时一次 有一次 它停止在所有 Android 设备上运行 但它仍然可以在桌面上运行 在 Android 设
  • 如何解决Chrome使用xhr轮询时的6个连接限制

    我最近发现Chrome似乎有6个连接限制 Chrome 在传输一定量的数据后挂起 等待可用的套接字 https stackoverflow com questions 23679968 chrome hangs after certain
  • jquery 选择除 div 及其子元素之外的所有元素

    我有这个 html css 代码 div div div div div div div div div div
  • 在调试过程中,单步执行程序时有时会出现“变量不可用”(Android Studio 3.5+)

    通常 变量在 Android Studio 版本 3 5 2 的调试模式下显示 但有时 当我单步执行程序时 我突然得到 变量不可用 见下图 这次我在存在错误的代码中得到了这个 所以我真的很想知道那里发生了什么 它是在调试模式下运行测试期间发
  • 使用 C++ 的简单 HTTP 请求

    在您将此标记为冗余之前 请注意我已经尝试了网上发布的许多方法 包括堆栈溢出 但它们都无法满足我的需求 另请注意 我对编程世界还很陌生 所以请原谅我滥用技术术语 现在我正在编写一个 C 程序 它计算来自用户计算机的一些数据 例如 IP 地址
  • std::string 类继承和繁琐的 C++ 重载解析

    我需要延长std basic string处理路径字符串和不同的operator include
  • 菜单图标未显示在操作栏中

    我需要在片段中膨胀自定义菜单 我只有一个菜单项 但图标未显示 有人可以告诉我的代码有什么问题吗 我的菜单 xml menu menu
  • 用于连接非映射表的 Hibernate HQL

    我有一个名为 Kurs 的实体 Entity public class Kurs Id GeneratedValue strategy GenerationType AUTO private long kursId private Stri
  • PACT - 使用提供者状态

    我正在尝试使用 pact 来验证 Spring Boot 微服务 我已经从消费者生成了契约文件 并使用契约经纪人在提供者端验证了它 我有另一个用例 我需要在根据实际服务响应验证协议文件之前执行一些代码 我阅读了有关状态更改 URL 和通过闭
  • 您对这个项目有什么建议? [关闭]

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

    我在通过调用初始化accumulo时创建了一个实例累积初始化但现在我想删除该实例 并且我想创建一个新实例 任何人都可以帮忙做到这一点吗 从 HDFS 中删除 ACCUMULO HOME conf accumulo site xml 中的 i
  • AgGrid 自定义 html 拖动

    我只是在考虑更改 ag 网格组件的拖动悬停 我找不到太多关于它的信息 有人知道如何在拖动模式下更改行的样式吗 我的目标是拥有不同的动画 整行 例如材质 UI UX https material io design components li
  • 为什么带有 EL 2.2 的 JSF 2.x 允许 MethodExpression 代替 ValueExpression?

    我看到几个问题询问如何将参数传递给 JSF 方法 在 EL2 2 和 servlet 3 0 中 它允许用户将参数传递到方法调用中 一个例子 如何从渲染的 h outputText 将参数传递给方法 https stackoverflow
  • C++11 std::thread 接受带有右值参数的函数

    我有一些作业 并且我很难理解 可能 如何将参数传递给 std thread 构造函数 假设以下代码 我删除了不需要的部分 template
  • 使用.net core 3.0进行脚本动态编译和运行代码

    我想提供在 NET core 3 中编译和运行代码 Csharp 类 的可能性 以用于脚本编写 脚本 类 应从文件系统加载并注入现有 静态 程序集中 https laurentkempe com 2019 02 18 dynamically
  • Javascript 函数将印度货币数字转换为支持 paise 的单词

    还有比这更快的解决方案吗 在花了一些时间谷歌搜索和玩弄其他人的代码之后 我做了一个快速修复 可重用函数适用于最大 99 99 99 999 的数字 number2text 1234 56 将返回ONE THOUSAND TWO HUNDRE
  • handleWatchKitExtensionRequest 未响应 Watchkit 扩展中的 openParentApplication (Swift)

    我正在尝试将信息从我的 WatchKit 应用程序发送到我的主要父应用程序 据我了解 我应该能够使用openParentApplication在我的 watchkit 扩展中 该扩展将由handleWatchKitExtensionRequ
  • 将 YUV 作为字节数组导入

    我正在开发一个项目 必须对 YUV420 SP NV21 图像 从 Android 相机拍摄 应用阈值 以确定哪些像素是 黑色 哪些像素是 白色 因此 我想将其作为字节数组导入 Python 中 使用 OpenCV NumPy PIL 这样