将YUV导入为字节数组

时间:2018-11-25 12:56:29

标签: python numpy yuv

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

因此,我想将其作为字节数组(使用OpenCV,NumPy,PIL等)导入Python中,以便可以对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根本没有数组!



谁能告诉我我在做什么错? 预先感谢!

1 个答案:

答案 0 :(得分:3)

您确实应该提供示例图像,以便人们可以更好地为您提供帮助-否则,他们会花很多时间来开发代码,以使他们认为您所指的图像格式是错误的。

假设您的数据来自Wikipedia,则可以看到所有Y样本都在前,然后是所有U样本和所有V样本。但是,U / V样本只有Y样本的1/4倍,因为这两个分量在水平和垂直方向上都以2:1的比率进行了二次采样:

enter image description here

因此,我们的想法是读取整组YUV样本,然后将前w*h个字节作为Y值,将下一个w*h/4个样本作为U并将下一个{{1} }采样为V:

w*h/4

我不知道你下一步打算做什么,所以我现在就把它留在那儿!


关键字:NV21,YUV,YUV420,Android,YUV430P,枕头,PIL,Python,图像,图像处理。