如何使用OpenCV保存与原始jpeg文件相同的jpeg数据

时间:2015-07-17 11:42:51

标签: python opencv numpy jpeg

我正在使用OpenCV和Python。我已将jpeg图像加载到numpy数组中。现在我想将其保存为jpeg格式,但由于图像未被修改,我不想再次压缩它。是否可以从numpy数组创建一个jpeg,它与从中加载的jpeg相同?

我知道这个工作流程(解码编码没有做任何事情)听起来有点愚蠢,但保留原始的jpeg数据不是一个选择。我很感兴趣是否可以使用手头的数据重新创建原始的jpeg。

问题与Test emplace_back不同,因为我没有修改图片中的任何内容。我真的想根据手头的数据恢复原始的jpeg文件。我假设有人可以绕过压缩步骤(压缩工件已经在数据中)并且只是以jpeg格式写入文件。问题是,如果可以使用OpenCV。

1 个答案:

答案 0 :(得分:1)

澄清答案,以下评论如下:

你所说的一点都没有意义;你说你有原始的,未经修改的RGB数据。不,你没有。您从压缩 jpeg文件中获得未压缩数据重建

JPEG标准指定如何解压缩图像/视频。标准中没有关于如何实际执行此压缩的内容,因此您的原始图像数据可能已经被压缩成任何一种不同的方式。您无法知道重新创建数据所需的解码步骤,因此您无法撤消它们。

想象一下。

  

"我有一个号码,44,请告诉我如何获得原件   来自"

的数字

这基本上就是你所要求的。

你可以做你想要的唯一方法(除了复制原始文件)是在加载到openCV之前将图像读入数组。然后,如果你想保存它,那么只需将原始数组写入文件,如下所示:

fi = 'C:\\Path\\to\\Image.jpg'
fo = 'C:\\Path\\to\\Copy_Image.jpg'
with open(fi,'rb') as myfile:
    im_array = np.array(myfile.read())

# Do stuff here

image = cv2.imdecode(im_array)

# Do more stuff here

with open(fo,'wb') as myfile:
    myfile.write(im_array)

当然,这意味着您将在内存中有效地存储两次数据,但这似乎是您唯一的选择。

有时候,无论你多么努力地做某事,你都必须承认它无法完成。