将图像字节数据流解码为JPEG

问题描述 投票:0回答:1

我正在努力从字节成功解码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进行处理。我...

python-3.x numpy image-processing jpeg string-decoding
1个回答
0
投票

您的FrameBytes.txt文件,尽管扩展名实际上是JPG文件(除非您仍然在保存时出现乱码)。

© www.soinside.com 2019 - 2024. All rights reserved.