惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
月光博客
月光博客
博客园 - Franky
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
Visual Studio Blog
有赞技术团队
有赞技术团队
V
V2EX
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
腾讯CDC
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
Martin Fowler
Martin Fowler
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
WordPress大学
WordPress大学
C
Check Point Blog
Microsoft Azure Blog
Microsoft Azure Blog
Microsoft Security Blog
Microsoft Security Blog

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
TIFF 格式图像
Yiwei Zhang · 2023-04-08 · via 又见苍岚

标签图像文件格式(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 rasterio

import 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/