『youcans 的 OpenCV 例程300篇 - 总目录』
【youcans 的 OpenCV 例程 300篇】253. 多帧图像(动图)的读取与保存
1. 多帧图像(动图)
多帧图像是将多幅图像或帧数据保存在单个文件中,也称为多页图像或图像序列,主要用于对时间或场景上相关图像集合进行操作的场合。例如,时间序列图像是动态图像(动图),可以形成简单的动画效果; 计算机X线断层扫描图像 (CT)是空间序列图像。常用的多帧图像格式有 GIF、PNG、TIFF。
2. 多帧图像读取函数 cv.imreadmulti
函数 cv.imreadmulti() 用于从指定的多帧图像文件中读取多幅图像。
函数说明:
cv.imreadmulti(filename[, mats=None, flags=IMREAD_ANYCOLOR]) -> retval, mats
cv.imreadmulti(filename, start, count[, mats=None, flags=IMREAD_ANYCOLOR]) -> retval, mats
参数说明:
- filename:读取多帧图像的文件路径和文件名
- mats:返回值,读取的图像文件向量,列表类型,列表元素为二维Numpy数组
- flags:图像读取模式,可选项,默认为 IMREAD_ANYCOLOR
- IMREAD_COLOR(1):始终将图像转换为 3 通道BGR彩色图像,默认方式
- IMREAD_GRAYSCALE(0):始终将图像转换为单通道灰度图像
- IMREAD_UNCHANGED(-1):按原样返回加载的图像(使用Alpha通道)
- IMREAD_ANYDEPTH(2):在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位
- IMREAD_ANYCOLOR(4):以任何可能的颜色格式读取图像
- start:开始读取的帧索引,即跳过此前的图像帧
- count:读取图像帧的页数
- retval:返回值,读取成功标志,布尔值
注意事项:
- 读取多帧图像文件的返回值 mats 是列表(list)类型,列表元素是二维 Numpy数组,即每个列表元素 mats[i] 是一幅二维图像。
2. 多帧图像保存函数 cv.imwritemulti
函数 cv.imwritemulti() 用于将多幅图像保存到指定的多帧图像文件中。
函数说明:
cv.imwritemulti(filename, img[, params=std::vector()]) -> retval
参数说明:
- filename:读取多帧图像的文件路径和文件名
- img:写入的多帧图像的数据文件
- flags:图像写入模式,可选项,默认值None
- retval:返回值,读取成功标志,布尔值
注意事项:
- 写入多帧图像文件的数据文件 img 是列表(list)类型,列表元素是二维 Numpy数组,即每个列表元素 img[i] 是一幅二维图像。
- 多帧图像中的每帧图像的大小可以相同,也可以不同。
- 写入多帧图像文件的数据文件可以是 tiff 格式,OpenCV 不允许 gif 格式。
【例程】多帧图像(动图)的读取和保存
本例程示例多帧图像(动图)的读取和保存。
"""
200 OpenCV examples by youcans / OpenCV 例程 200 篇
Copyright: 2022, Shan Huang, youcans@qq.com
"""
# 【0108】多帧图像(动图)的读取和保存
import cv2 as cv
from matplotlib import pyplot as plt
if __name__ == '__main__':
# 读取单幅图像,支持 bmp、jpg、png、tiff 等常用格式
img1 = cv.imread("../images/FVid1.png") # 读取彩色图像 FVid1.png
img2 = cv.imread("../images/FVid2.png") # 读取彩色图像 FVid2.png
img3 = cv.imread("../images/FVid3.png") # 读取彩色图像 FVid3.png
img4 = cv.imread("../images/FVid4.png") # 读取彩色图像 FVid4.png
imgList = [img1, img2, img3, img4] # 生成多帧图像列表
# 保存多帧图像文件
saveFile = "../images/imgList.tiff" # 保存文件的路径
ret = cv.imwritemulti(saveFile, imgList)
if (ret):
print("Image List Write Successed in {}".format(saveFile))
print("len(imgList): ", len(imgList)) # imgList 是列表,只有长度没有形状
# 读取多帧图像文件
imgMulti = cv.imreadmulti("../images/imgList.tiff") # 读取多帧图像文件
print("len(imgList): ", len(imgList)) # imgList 是列表
# 显示多帧图像文件
for i in range(len(imgList)):
print("\timgList[{}]: {}".format(i, imgList[i].shape)) # imgList[i] 是 Numpy 数组
cv.imshow("imgList", imgList[i]) # 在窗口 imgList 逐帧显示
cv.waitKey(1000)
cv.destroyAllWindows()
【本节完】
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/128466627)
Copyright 2022 youcans, XUPT
Crated:2022-12-30