opencv单h264原始帧作为二进制字符串

时间:2014-01-16 11:53:50

标签: python opencv numpy h.264 mat

在python中创建了一个rtsp客户端,它接收一个h264流并返回单个h264原始帧作为二进制字符串。我正在尝试动态处理每个h264帧。

我尝试了几种方法将此帧转换为numpy数组以进行处理,但未成功。

到目前为止,我知道cv2.VideoCapture只接受一个文件名作为参数,而不是一个框架,也不是一个StringIO对象(文件就像指向缓冲区的指针),但我需要传递给它我的字符串。

我也尝试了类似的事情:

nparr = np.fromstring(frame_bin_str, np.uint8)
img_np = cv2.imdecode(nparr, cv2.CV_LOAD_IMAGE_COLOR)

尝试了不同的标志。但也悲惨地失败了。

经过许多其他尝试失败之后,我的想法用完了。

总结我需要做的事情:我在变量中有一个h264原始帧,我需要创建一个openvc有效的numpy数组,或者以某种方式最终得到一个包含该单帧的VideoCapture对象,所以我可以处理框架。

任何指针都会非常感激。

希望这一切都有意义。

提前谢谢

1 个答案:

答案 0 :(得分:0)

正如Micka所说,OpenCV中不支持h264 RAW格式,我们应该自行转换。

我认为您应该将nparr重塑为传入图像的形状。没必要做imdecode。使用imshow显示结果并验证。

以下是我用于以类似方式转换16位RAW图像(灰度)的代码。我在显示之前重新规范了我的图像。

framenp = np.fromstring(framestr, dtype=np.uint16).reshape((1024,1280))
#renormalizing to float
framenp = (framenp*1./framenp.max())
framenp.dtype = np.float
cv2.imshow('frame', cv2.resize(framenp, (640,480)))