Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用PIL TIFF标记从.tif图像元数据提取比例尺_Python_Metadata_Python Imaging Library_Tiff - Fatal编程技术网

Python 使用PIL TIFF标记从.tif图像元数据提取比例尺

Python 使用PIL TIFF标记从.tif图像元数据提取比例尺,python,metadata,python-imaging-library,tiff,Python,Metadata,Python Imaging Library,Tiff,我是Python新手,希望从电子显微镜(.tif)图像中提取比例信息 当我在记事本中打开文件并滚动到底部时,我看到一个标题“[Scan]”,下面有一个项目“PixelWidth=3.10059e-010” 我想在Python中读取该值,并将其用作测量图像中物理距离的校准因子 我发现使用PIL()是一种很有前途的方法,但在运行推荐的代码时遇到了一个错误 from PIL import Image from PIL.TiffTags import TAGS with Image.open(imag

我是Python新手,希望从电子显微镜(.tif)图像中提取比例信息

当我在记事本中打开文件并滚动到底部时,我看到一个标题“[Scan]”,下面有一个项目“PixelWidth=3.10059e-010”

我想在Python中读取该值,并将其用作测量图像中物理距离的校准因子

我发现使用PIL()是一种很有前途的方法,但在运行推荐的代码时遇到了一个错误

from PIL import Image
from PIL.TiffTags import TAGS

with Image.open(imagetoanalyze) as img:
    meta_dict = {TAGS[key] : img.tag[key] for key in img.tag.iterkeys()}
我希望这会创建一个对象“meta_dict”,其中包含“PixelWidth”之类的字符串和“3.10059e-010”之类的浮动

相反,我看到:

Traceback (most recent call last):

  File "<ipython-input-62-4ea0187b2b49>", line 2, in <module>
    meta_dict = {TAGS[key] : img.tag[key] for key in img.tag.iterkeys()}

  File "<ipython-input-62-4ea0187b2b49>", line 2, in <dictcomp>
    meta_dict = {TAGS[key] : img.tag[key] for key in img.tag.iterkeys()}

KeyError: 34682
回溯(最近一次呼叫最后一次):
文件“”,第2行,在
meta_dict={TAGS[key]:img.tag[key]代表img.tag.iterkeys()中的key
文件“”,第2行,在
meta_dict={TAGS[key]:img.tag[key]代表img.tag.iterkeys()中的key
密钥错误:34682

很明显我做错了什么。任何帮助都将不胜感激。谢谢大家!

使用PIL,我认为使用for循环设置字典,然后打印所需结果会更清晰

from PIL import Image
from PIL.TiffTags import TAGS


with Image.open(imagetoanalyze) as img:
    meta_dict = {}
    for key in img.tag:      # don't really need iterkeys in this context
        meta_dict[TAGS.get(key,'missing')] = img.tag[key]

# Now you can print your desired unit:

print meta_dict["PixelWidth"]

如果您只需要一个值,还可以使用以下内容查找
PixelWidth
标记的编号:

for k in img.tag:
     print k,TAGS.get(k,'missing')

然后只需打印
img.tag[]
,而无需填充字典

您的文件可能是TIFF,TIFF标签34682中包含类似INI的元数据

尝试使用:


您正在扫描图像中的所有标记,
tags
没有
34682
的条目。这并不意味着您仍然无法取出
PixelWidth
标记,因为缺少的标记可能与您无关。您可以使用
TAGS.get(key)
而不是
TAGS[key]
来避免在未找到的键上崩溃,并使用如下所示的循环来确定要打印的值。谢谢!这消除了“KeyError:34682”,但给了我一个“meta_dict”对象,其中只有约10%的可用元数据值可由它们各自的键调用。剩下的90%可以通过在meta_dict['missing']中找到,在一个由“\r\”s分隔的大文本块中找到。所需的“PixelWidth”键恰好隐藏在此meta_dict['missing']text.Bummer中。很高兴
tiffile
解决方案为您提供了帮助。我还成功地使用
exiftool
进行了一般图像元数据提取,包括EM比例类型。我还想从蔡司显微镜上采集的图像中提取相同的校准因子。在这种情况下,在记事本中打开.tif文件不会显示可读文本。我希望通过一个简单的修改,从蔡司的图像中提取出与像素宽度相当的图像。浏览tiffile.py网页,看起来“tif.sem_metadata[…]”可能是实现这一点的方法。首先,我尝试:使用tiffile.tiffile(imagetoanalyze)作为tif:metadata=tif.sem_metadata“这将创建一个类型为“NoneType”的对象“metadata”“和1的大小。知道如何查看/提取蔡司元数据吗?请共享该文件。如果
sem\u metadata
返回None,则该文件不会被识别为蔡司sem图像。我的错误是:
sem\u metadata
实际上会提取图像元数据。看起来,我试图从中提取元数据的第一张蔡司图像可能已保存,但没有保存任何元数据。对于其他文件,
sem\u元数据
起作用。再次感谢!
import tifffile
with tifffile.TiffFile('FEI_SEM.tif') as tif:
    print(tif.fei_metadata['Scan']['PixelWidth'])