《数字图像处理-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