我正在尝试从原始视频文件中提取帧(YUV422 8位编码),但是对于我所看到的,我需要将数据放入UMat()
中,但不能使用来自缓冲区的数据。
我首先使用
fb = np.frombuffer
但是我对如何继续感到困惑。 如果我只是将新数组与
一起使用 cv2.cvtColor(um, cv2.COLOR_YUV2BGR_Y422)
我得到None
,但是尝试用它制作UMat时出现错误:
um = cv2.UMat(height, width, cv2.CV_8UC2, db)
TypeError: UMat() takes at most 2 arguments (4 given)
完整代码:
width = 1824
height = 942
pixels_per_frame = width * height
with open('my_video.1', 'rb') as video:
header = video.read(16) #passing the initial header info
while True:
frame_byte = video.read(pixels_per_frame * 2)
# print(frame_byte.hex())
if frame_byte == b"":
break
fb = np.frombuffer(frame_byte, dtype=np.uint8)
um = cv2.UMat(height, width, cv2.CV_8UC2, fb)
frame = cv2.cvtColor(um , cv2.COLOR_YUV2BGR_Y422)
cv2.imshow("Image", frame )
cv2.waitKey(100) ```