Python:在PIL& /或pygame中操作16位.tiff图像:以某种方式转换为8位?

时间:2011-04-24 04:52:43

标签: python python-imaging-library tiff pygame 16-bit

enter image description here大家好,

我正在开发一个程序,它可以从照片中确定酵母的平均菌落大小,并且在我测试的.bmp图像上工作正常。该程序使用pygame,稍后可能会使用PIL。

然而,我们在实验室中使用的相机/软件组合只能保存16位灰度tiff,而pygame似乎无法识别16位tiff,只有8位。我一直在阅读最近几个小时的简单方法,但即使是Python Imaging Library似乎也无法使用16位.tiff,我已经尝试了,我得到了“IOError:无法识别图像文件”。

import Image

img = Image.open("01 WT mm.tif")

我的最终目标是让这个程序用户友好且易于安装,所以我试图避免添加额外的模块或要求人们安装ImageMagick或其他东西。

有没有人知道使用免费软件或纯python这个问题的简单解决方法?我不太了解图像:深度操作超出了我的范围。但我相当确定我不需要全部16位,而且可能只有大约8位实际上有真正的数据。事实上,我曾经使用ImageMagick尝试转换它们,这导致了一个全白的图像:我已经读过我应该使用命令“-auto-levels”,因为数据实际上并不包含16-位范围。

我非常感谢你的帮助,并为我缺乏知识而道歉。

P.S。:有没有人知道如何让非程序员安装我的Python程序?有没有办法,例如,以某种方式将它与Python和pygame捆绑在一起,所以它只有一个安装?这可以在Windows和Mac上完成吗?谢谢。

编辑:我试图在GIMP中打开它,并得到3个错误:

1)字段“DateTime”的计数不正确(27,期望20);标签修剪 2)抱歉,无法处理12位样本的图像 3)不支持的布局,没有RGBA加载器

这是什么意思,我该如何适应它?

3 个答案:

答案 0 :(得分:2)

我会看pylibtiff,它有一个纯粹的python tiff阅读器。

对于捆绑,你最好的选择可能是py2exe和py2app。

答案 1 :(得分:2)

如果您使用的是Windows系统,那么

py2exe是打包应用程序的方法。

关于16比特的tiff问题:

此示例http://ubuntuforums.org/showthread.php?t=1483265显示了如何使用PIL转换显示。

现在来看未解决的部分问题:在进行图像分析时,您希望在图像处理中尽可能长时间地保持最高动态范围 - 这样就会丢失更少的信息。您可能或可能不知道,PIL为您提供了许多滤镜/变换,可以增强图像的对比度,甚至可以提高光照水平,或执行边缘检测。您可能要考虑的未来方向是显示原始图像(当然缩放到8位)和已经过边缘检测处理的缩放图像。

查看http://code.google.com/p/pyimp/wiki/screenshots以获取更多示例和示例代码。

答案 2 :(得分:1)

这实际上是一个2部分问题:

1)Python的16位图像数据修改 - 我通常使用GDAL + Numpy。这可能对您的要求有点过分,您可以使用PIL + Numpy。

2)发布工程Python应用程序可能会变得混乱。根据您的应用的复杂程度,您可以使用py2debpy2apppy2exe。学习distutils也会有所帮助。