我正在努力成功地将 JPEG 图像从字节解码回 JPEG。
我从 MJPG 字节流的编码帧开始,我想对其进行解码以便使用 OpenCV 进行操作。我是 Python、numpy、opencv 等方面的新手!
我现在将帧 JPG 数据放在文本文件中: b'\xf\xd8\xff\xdb\x00.... 等用于测试目的:
当我尝试在第 14 行将 numpy 数组的大小调整为原始视频流分辨率 (640, 480) (npFlat.reshape((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 - 使用 OpenCV 将字节图像转换为 NumPy 数组但试图避免 PIL,而 frombuffer 方法似乎对我来说也失败了。
好的,我取得了一些进展,现在:
npFlat = np.frombuffer(MyBytes.encode('utf-8'),dtype=np.int8).
现在,当我将 npFlat“重塑”为 (374, 610) 时,我也可以使代码成功。 IE。这样 374 x 610 = 平面 numpy 数组,其长度为 228140...但这一切看起来很奇怪。缓冲区信息代表一个 JPG,我正在尝试重新打开它......但还没有接近。
MyBytes.txt”数据输入文件可在此处查看:https://drive.google.com/file/d/18pqILl9myeTRjdiqtExFyOe94Km_aNNM/view?usp=sharing]1