标签图像文件格式(Tagged Image File Format,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像,与其他格式不同的是 TIFF 可以存储浮点数据。
简介
标签图像文件格式(Tagged Image File Format,简写为TIFF)是一种灵活的位图格式,主要用来存储包括照片和艺术图在内的图像。它最初由Aldus公司与微软公司一起为PostScript打印开发。TIFF与JPEG和PNG一起成为流行的高位彩色图像格式。TIFF格式在业界得到了广泛的支持,如Adobe公司的Photoshop、The GIMP Team的GIMP、Ulead PhotoImpact和Paint Shop Pro等图像处理应用、QuarkXPress和Adobe InDesign这样的桌面印刷和页面排版应用,扫描、传真、文字处理、光学字符识别和其它一些应用等都支持这种格式。如今Adobe公司从Aldus获得了印刷应用程序-PageMaker之后控制着TIFF的规范。
术语“Tagged Image File Format”或者*“Tag Image File Format”*在一些早期的TIFF规范中是作为副标题存在的。当前的TIFF规范TIFF 6.0 不再使用这些术语,现在的名字仅仅叫做“TIFF”。
做为一种标记语言,TIFF与其他文件格式最大的不同在于除了图像数据,它还可以记录很多图像的其他信息。它记录图像数据的方式也比较灵活, 理论上来说, 任何其他的图像格式都能为TIFF所用, 嵌入到TIFF里面。比如JPEG, Lossless JPEG, JPEG2000和任意数据宽度的原始无压缩数据都可以方便的嵌入到TIFF中去。由于它的可扩展性, TIFF在数字影响、遥感、医学等领域中得到了广泛的应用。TIFF文件的后缀是.tif或者.tiff
对于工程应用来说,TIFF 最关键的性质在于可以保存浮点型数据,这样可以使得 OpenCV 可以保存、读取更精确的矩阵数据。
读取 TIFF 图像
Python
1
| img = cv2.imread('img.tiff', cv2.IMREAD_UNCHANGED)
|
大图读取
1 2 3
| import imageio.v3 as iio with iio.imopen(file_path, 'r') as image_file: img = image_file.read()
|
或者
1 2 3 4 5
| # pip install Pillow from PIL import Image# 打开一个TIFF图像 img = Image.open('example.tif')
|
C++
1
| cv::Mat img = cv::imread("img.tiff", cv::IMREAD_UNCHANGED);
|
读取 TIFF 信息
Python
1 2 3 4 5 6
| # pip install rasterioimport rasterio with rasterio.open('img.tiff') as src: print(src.meta) img = src.read()
|
写入 TIFF 图像
Python
1
| cv2.imwrite('img.tiff', img)
|
img 可以是 float32 或 float64 类型,读取出来的数据都和之前完全相同
C++
1
| cv::imwrite("img.tiff", img)
|
写入 TIFF 信息
Python
可以使用PIL(Pillow)库或者rasterio库向TIFF图片添加属性(元数据)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from PIL import Image, TiffTags, TiffImagePlugin# 打开一个TIFF图像 img = Image.open('example.tif') # 添加自定义标签和值 tag = 65000 # 自定义标签,确保不与标准TIFF标签冲突 value = 'My Custom Metadata' # 将标签和值添加到图片的元数据中 if tag not in TiffTags.TAGS: TiffTags.TAGS[tag] = tag TiffImagePlugin.WRITE_LIBTIFF = True img.tag_v2[tag] = value # 保存图像,这将覆盖原始文件,所以如果需要保留原始文件,请先复制它 img.save('example_with_metadata.tif')
|
或
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import rasterio from rasterio.plot import show# 打开一个TIFF图像 with rasterio.open('example.tif', 'r+') as src: # 添加元数据 src.meta['my_custom_metadata'] = 'My Custom Metadata' # 更新图像的元数据 src.update_tags(1, my_custom_metadata='My Custom Metadata') # 可以添加更多的元数据 src.update_tags(1, another_metadata='Another Value') # 如果需要保存更改,可以这样做(这将覆盖原始文件) # src.write(src.read())
|
参考资料
文章链接:
https://www.zywvvd.com/notes/study/image-processing/format/tiff/opencv-tiff/