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

2024-04-29 20:19:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在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对象,这样我就可以处理该帧。在

任何建议都将不胜感激。在

希望这一切都有意义。在

提前谢谢你


Tags: 对象方法字符串numpy客户机文件名np二进制
1条回答
网友
1楼 · 发布于 2024-04-29 20:19:33

正如米卡建议的那样,OpenCV中不支持h264原始格式,我们应该自己转换它。在

我认为您应该将nparr重塑为传入图像的形状。不需要进行imdecode。使用imshow显示结果并验证。在

这是我用类似的方法转换16位原始图像(灰度)的代码。在显示之前,我已经重新规范化了我的图像。在

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)))

相关问题 更多 >