我使用的是OpenCV和Python。我已经将jpeg图像加载到numpy数组中。现在我想把它保存回jpeg格式,但由于图像没有被修改,我不想再压缩它。是否有可能从numpy数组中创建一个与加载它的jpeg相同的jpeg ?
我知道这个工作流程(解码编码不做任何事情)听起来有点愚蠢,但保持原始的jpeg数据不是一个选择。我很感兴趣的是,如果有可能重新创建原始的jpeg只是使用手头的数据。
这个问题不同于阅读。jpg图像并保存它而不改变文件大小,因为我没有修改图片中的任何东西。我很想根据手头的数据还原原来的jpeg文件。我假设可以绕过压缩步骤(压缩工件已经存在于数据中),只以jpeg格式写入文件。问题是,如果这是可能的与OpenCV。
澄清答案,以下评论:
你说的话毫无意义;您说您拥有原始的、未修改的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)
当然,这意味着你将有数据存储两次,有效地,在内存中,但这似乎是你唯一的选择。
有时候,无论你多么想做一件事,你都必须接受它就是做不到的事实。