在 Ubuntu 18.04 与任何其他 OS 中通过 PIL 保存和重新加载图像后获得不同的 RGB 值
Getting different RGB values after saving and re-loading an image via PIL in Ubuntu 18.04 vs any other OS
每当我加载一张图像,以 90% 的质量保存它,重新加载保存的图像,然后打印它的 RGB 矩阵的总和,我在 Ubuntu 18.04.5、CentOS 8.2 和一个Ubuntu 20.04+、Fedora 33 和 Windows 10 中的不同值。我在上述所有操作系统中使用相同版本的 pillow/PIL、numpy 和 python 对其进行了测试但是结果是一样的
img = Image.open('Sp_D_CNN_A_art0024_ani0032_0268.jpg')
np.sum(np.array(img))
OUTPUT : 28586794 (Same for all the OS)
img.save('temp.jpg', 'JPEG', quality = 90)
tempimg = Image.open('temp.jpg')
np.sum(np.array(tempimg))
OUTPUT : 28588237 (for Ubuntu 18.04.5 and CentOS 8.2.2004)
28588547 (for Ubuntu 20.04+, Fedora 33, Windows 10 20H2)
现在,这里的差异可能看起来很小,但问题是,经过我的误差水平分析算法进一步处理后,差异变得巨大,并且当我在 Google Colab 上训练我的分割模型时(它使用 Ubuntu 18.04.5 在其运行时)生成的掩码在 Ubuntu 20.04+、Fedora 33、Windows 10 20H2 中非常不准确。
为什么会发生这种情况,我该如何解决?
其背后的罪魁祸首是枕头(PIL)库使用的底层libjpeg版本。尽管 Ubuntu 18.04.5 和 Ubuntu 20.04.1 都具有相同的 libjpeg 包,但默认安装在 Ubuntu 18.04.5 上的 pillow 版本有其自己的二进制文件。因此,一个解决方案是删除当前的枕头并通过从源代码下载和构建它来重新安装它,以便它保证使用系统的 libjpeg。
首先移除当前的枕头模块
python3 -m pip uninstall Pillow
然后只需安装这里列出的依赖包:
https://pillow.readthedocs.io/en/stable/installation.html#building-on-linux
然后运行:
python3 -m pip install Pillow --no-binary :all:
每当我加载一张图像,以 90% 的质量保存它,重新加载保存的图像,然后打印它的 RGB 矩阵的总和,我在 Ubuntu 18.04.5、CentOS 8.2 和一个Ubuntu 20.04+、Fedora 33 和 Windows 10 中的不同值。我在上述所有操作系统中使用相同版本的 pillow/PIL、numpy 和 python 对其进行了测试但是结果是一样的
img = Image.open('Sp_D_CNN_A_art0024_ani0032_0268.jpg')
np.sum(np.array(img))
OUTPUT : 28586794 (Same for all the OS)
img.save('temp.jpg', 'JPEG', quality = 90)
tempimg = Image.open('temp.jpg')
np.sum(np.array(tempimg))
OUTPUT : 28588237 (for Ubuntu 18.04.5 and CentOS 8.2.2004)
28588547 (for Ubuntu 20.04+, Fedora 33, Windows 10 20H2)
现在,这里的差异可能看起来很小,但问题是,经过我的误差水平分析算法进一步处理后,差异变得巨大,并且当我在 Google Colab 上训练我的分割模型时(它使用 Ubuntu 18.04.5 在其运行时)生成的掩码在 Ubuntu 20.04+、Fedora 33、Windows 10 20H2 中非常不准确。
为什么会发生这种情况,我该如何解决?
其背后的罪魁祸首是枕头(PIL)库使用的底层libjpeg版本。尽管 Ubuntu 18.04.5 和 Ubuntu 20.04.1 都具有相同的 libjpeg 包,但默认安装在 Ubuntu 18.04.5 上的 pillow 版本有其自己的二进制文件。因此,一个解决方案是删除当前的枕头并通过从源代码下载和构建它来重新安装它,以便它保证使用系统的 libjpeg。
首先移除当前的枕头模块
python3 -m pip uninstall Pillow
然后只需安装这里列出的依赖包: https://pillow.readthedocs.io/en/stable/installation.html#building-on-linux
然后运行:
python3 -m pip install Pillow --no-binary :all: