【OpenCV 例程 300篇】253. 多帧图像(动图)的读取与保存

『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:返回值,读取成功标志,布尔值

注意事项:

  1. 读取多帧图像文件的返回值 mats 是列表(list)类型,列表元素是二维 Numpy数组,即每个列表元素 mats[i] 是一幅二维图像。

【例程】多帧图像(动图)的读取

本例程示例多帧图像(动图)的读取。

"""
200 OpenCV examples by youcans / OpenCV 例程 200 篇
Copyright: 2022, Shan Huang, [email protected]
"""

# 【0108】多帧图像(动图)的读取和保存
import cv2 as cv
from matplotlib import pyplot as plt

if __name__ == '__main__':
    # 读取多帧图像文件
    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()

3. 多帧图像保存函数 cv.imwritemulti

函数 cv.imwritemulti() 用于将多幅图像保存到指定的多帧图像文件中。

函数说明:

cv.imwritemulti(filename, img[, params=std::vector()]) -> retval

参数说明:

  • filename:读取多帧图像的文件路径和文件名
  • img:写入的多帧图像的数据文件
  • flags:图像写入模式,可选项,默认值None
  • retval:返回值,读取成功标志,布尔值

注意事项:

  1. 写入多帧图像文件的数据文件 img 是列表(list)类型,列表元素是二维 Numpy数组,即每个列表元素 img[i] 是一幅二维图像。
  2. 多帧图像中的每帧图像的大小可以相同,也可以不同。
  3. 写入多帧图像文件的数据文件可以是 tiff 格式,OpenCV 不允许 gif 格式。

【例程】多帧图像(动图)的保存

本例程示例多帧图像(动图)的保存。

"""
200 OpenCV examples by youcans / OpenCV 例程 200 篇
Copyright: 2022, Shan Huang, [email protected]
"""

# 【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 是列表,只有长度没有形状

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【本节完】

版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/128466627)
Copyright 2022 youcans, XUPT
Crated:2022-12-30

猜你喜欢

转载自blog.csdn.net/youcans/article/details/128466627
今日推荐