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

Posted YouCans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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] 是一幅二维图像。

2. 多帧图像保存函数 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, 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

以上是关于OpenCV 例程 300篇253. 多帧图像(动图)的读取与保存的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV 例程 300篇255.OpenCV 实现图像拼接

OpenCV 例程 300篇255.OpenCV 实现图像拼接

OpenCV 例程 300篇254.OpenCV 绘制图像标记

OpenCV 例程300篇02. 图像的保存(cv2.imwrite)

OpenCV 例程300篇01. 图像的读取(cv2.imread)

OpenCV 例程300篇03. 图像的显示(cv2.imshow)