我是Python的新手,希望从电子显微镜(.tif)图像中提取比例信息。
当我在记事本中打开文件并滚动到底部时,我看到一个标题“ [Scan]”及其下的一个项目“ PixelWidth = 3.10059e-010”。
我想在Python中读取此值,并将其用作测量图像内物理距离的校准因子。
我发现了使用PIL(https://stackoverflow.com/a/46910779/10244370)的一种有前途的方法,但是在运行推荐的代码时遇到错误。
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
很明显,我做错了什么。任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
您的文件可能是FEI SEM TIFF,它在TIFF标签34682中包含类似INI的元数据。
尝试使用tifffile:
import tifffile
with tifffile.TiffFile('FEI_SEM.tif') as tif:
print(tif.fei_metadata['Scan']['PixelWidth'])
答案 1 :(得分:0)
使用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[<thatnumber>]
而不填充字典。