如何在Python中高效模拟图像压缩伪影?

7

我正在使用模拟图像训练神经网络,而在真实生活中出现的一种情况是低质量的JPEG压缩。它以特定方式模糊了尖锐的边缘。有没有一种有效的方法来模拟这些效果?我的意思是创建一个干净输入的损坏版本。这些图像是灰度的,并存储为numpy数组。


1
把它们写成低质量的JPEG文件,然后再读回来,也许可以吗? - Mark Setchell
我正在考虑,也许可以写入ramdisk。模拟本身非常快,因此我不想通过读/写磁盘来限制它。 - Mastiff
1
请看这里,了解如何使用io.BytesIO将JPEG写入内存 https://dev59.com/t67la4cB1Zd3GeqPaUi2#52281257 - Mark Setchell
看起来我有一个使用imageio.imwrite()和imread(),加上io.BytesIO的解决方案。谢谢。 - Mastiff
太好了!随意为所有人编写并参考自己的问题答案,然后接受它是正确的并获得积分...完全没问题。 - Mark Setchell
1个回答

4

感谢评论中的回答,这里提供一种解决方案,使用标准的Python库将图像保存为JPEG格式,并在内存中重新读取。

import io
import imageio

# Image is 2D numpy array, q is quality 0-100
def jpegBlur(im,q):
  buf = io.BytesIO()
  imageio.imwrite(buf,im,format='jpg',quality=q)
  s = buf.getbuffer()
  return imageio.imread(s,format='jpg')

在我的函数中,我也对图像进行了预处理和后处理,将其从float64转换为uint8,然后再转回来,但这是基本思路。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接