我正在一个项目中,我必须对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根本没有数组!
谁能告诉我我在做什么错?
预先感谢!
答案 0 :(得分:3)
您确实应该提供示例图像,以便人们可以更好地为您提供帮助-否则,他们会花很多时间来开发代码,以使他们认为您所指的图像格式是错误的。
假设您的数据来自Wikipedia,则可以看到所有Y样本都在前,然后是所有U样本和所有V样本。但是,U / V样本只有Y样本的1/4倍,因为这两个分量在水平和垂直方向上都以2:1的比率进行了二次采样:
因此,我们的想法是读取整组YUV样本,然后将前w*h
个字节作为Y值,将下一个w*h/4
个样本作为U并将下一个{{1} }采样为V:
w*h/4
我不知道你下一步打算做什么,所以我现在就把它留在那儿!
关键字:NV21,YUV,YUV420,Android,YUV430P,枕头,PIL,Python,图像,图像处理。