我正在努力从字节成功解码JPEG图像,然后又重新回到JPEG。
我从MJPG字节流的编码帧开始,我想对其进行解码以便使用OpenCV进行处理。我是Python,numpy,opencv等的新手!
我现在在文本文件中将JPG框架数据保存为b'\ xf \ xd8 \ xff \ xdb \ x00 .... etc等,以便进行测试:
当我尝试将numpy数组的大小调整为第14行(npFlat.reshape((640,480))上的原始视频流分辨率(640,480)时,代码似乎失败。
** ValueError:无法将大小为228140的数组重塑为形状(640,480)*
import io import cv2 import numpy as np BytesFile = open('FrameBytes.txt') MyBytes=BytesFile.read() BytesFile.close() dt=np.dtype(np.unit8) dt=dt.newbtyeorder('>') npFlat = np.fromfile('FrameBytes.txt'.dtype=dt) npResized = npFlat.reshape(640,480,3) #CODE FAILING TO RESIZE AT THIS LINE... cv.imshow('resized',npResized)
难道即使我的视频帧是从640、480提要中捕获的,但由于某种原因,在编码过程中尺寸还是发生了变化?这就是我目前能想到的。任何帮助都欢迎。
我已经查看了相关文章:Python - byte image to NumPy array using OpenCV,但尝试避免使用PIL,并且frombuffer方法似乎对我也失败了。
确定,所以我取得了一些进展,现在有了:
npFlat = np.frombuffer(MyBytes.encode('utf-8'),dtype=np.int8).
当我将npFlat重塑为(374,610)时,我现在也可以获得成功的代码。即因此374 x 610 =平面numpy数组,长度为228140 ...但是,这一切似乎都很奇怪。缓冲区信息表示一个JPG,我正尝试重新打开它...并且尚未关闭...
我正在努力从字节成功解码JPEG图像,然后再次解码回JPEG。我从MJPG字节流的编码帧开始,我想对其进行解码以便使用OpenCV进行处理。我...
您的FrameBytes.txt文件,尽管扩展名实际上是JPG文件(除非您仍然在保存时出现乱码)。