《数字图像处理-OpenCV/Python》连载(9)多帧图像的读取与保存

《数字图像处理-OpenCV/Python》连载(9)多帧图像的读取与保存


本书京东优惠购书链接:https://item.jd.com/14098452.html
本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html

在这里插入图片描述


第1章 图像的基本操作

为了方便初学者从零开始学习OpenCV-Python,本书从图像的读取、保存和显示等基本操作开始介绍,使读者可以循序渐进地使用和理解本书的每一个例程。


1.5 多帧图像的读取与保存

多帧图像是指将多幅图像或帧数据保存在单个文件中,也称多页图像或图像序列,主要用于对时间或场景相关图像集合进行操作的场合。例如,时间序列图像是动态图像(动图),可以实现简单的动画效果,计算机断层扫描(CT)图像是空间序列图像。常用的多帧图像格式有GIF、PNG、TIFF。

函数cv.imreadmulti用于从指定的多帧图像文件中读取多幅图像。函数cv.imwritemulti用于将多幅图像保存到指定的多帧图像文件中。

函数原型

cv.imreadmulti(filename[, mats=None, flags=IMREAD_ANYCOLOR]) → retval, mats
cv.imreadmulti(filename, start, count[, mats=None, flags=IMREAD_ANYCOLOR]) → retval, mats
cv.imwritemulti(filename, img[,]) → retval


参数说明

  • filename:读取或写入多帧图像的文件路径和文件名,包括扩展名。
  • mats:返回值,读取的图像文件向量,是列表类型,列表元素为多维Numpy数组。
  • img:写入的多帧图像的数据文件,是列表类型,列表元素为多维Numpy数组。
  • flags:图像读取模式,可选项,默认值为IMREAD_ANYCOLOR。
  • start:开始读取的帧索引,即跳过此前的图像帧。
  • count:读取图像帧的页数。
  • retval:返回值,读取成功标志,布尔值。

注意问题
(1) 本函数中读取多帧图像文件的返回值mats、写入的多帧图像的数据文件img是列表(List)类型。列表元素是多维Numpy数组,即每个列表元素 mats[i] 是一幅二维图像。
(2) 多帧图像中每帧图像的大小可以相同,也可以不同。
(3) OpenCV目前不支持GIF格式,推荐使用TIFF格式处理多帧图像。


【例程0108】多帧图像(动图)的读取和保存

本例程用于多帧图像(动图)的读取和保存。


# 【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()

在这里插入图片描述


【第一章连载完】

本书京东优惠购书链接:https://item.jd.com/14098452.html


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

欢迎关注本书CSDN独家连载专栏
《数字图像处理-OpenCV/Python》连载: https://blog.csdn.net/youcans/category_12418787.html

Guess you like

Origin blog.csdn.net/youcans/article/details/133325652