前言
要求opencv版本4.1.2.30(4.x >=版本),我的版本4.5.3 opencv数据的保存
1、函数
cv.imwrite(filename,img,paras) filename:保存图像的路径和文件名,包含图像格式 img:将要保存的Array类型的数组 params:图片格式设置的属性(一般不填写。。)
1.1代码示例Save_image.py
代码如下(示例):
from typing import no_type_check
import cv2 as cv
import sys
import numpy as np
import matplotlib.pyplot as plt
if __name__ =='__main__':
#读取图片并判断是否成功
img = cv.imread('./chapter_2/flower.jpg')
if img is None:
print('Failed to read flower.jpg')
sys.exit()
else:
#添加alpa通道
zeros = np.ones(img.shape[:2],dtype=img.dtype)*100
result = cv.merge([img,zeros])
print(f'原图的通道数{img.shape[2]}')
print(f'处理后的通道数{result.shape[2]}')
plt.imshow(result)
plt.show()
cv.imwrite('./chapter_2/result_alpha.png',result)
1.2 结果展示:
2.保存视频:
2.1函数
cv.VideoWriter(filename,fource,fps,frameSize,isColor) filename:保存视频的路径和文件名 fource:压缩帧的4字符编/解码器选项 fps:保存视频的帧率 frameSize:视频帧的大小 isColor:表示是否已彩色保存,默认彩色
2.2代码示例Save_video.py
import cv2 as cv
if __name__ =='__main__':
#设置编码/解码方式
fourcc = cv.VideoWriter_fourcc(*'DIVX')
#采用摄像头获取图像
video = cv.VideoCapture(0)
result = cv.VideoWriter('./chapter_2/Save_video.avi',fourcc,20.0,(640,480))
#判断是否成功创建视频流
while video.isOpened():
ret,frame = video.read()
if ret is True:
frame = cv.flip(frame,1)
result.write(frame)
cv.imshow('Video',frame)
cv.waitKey(25)
#按下Q键退出
if cv.waitKey(1) & 0xFF ==ord('q'):
break
else:
break
video.release()
result.release()
cv.destroyAllWindows()
2.3 结果展示:
3 保存读取XML和YMAL文件
3.1 函数
cv.FileStorage(filename,flags,encoding) filename:打开的文件名称 flags:对文件执行的操作类型标志 encoding:编码格式(通常默认) 可以声明cv.FileStorage()不加参数后续通过open()函数添加: 如cv.FileStorage().open(filename,flags,encoding) cv.FileStorage.write(name,val)写入 name:变量名称 val:值
3.2 代码示例(XML为例)
import cv2 as cv
import numpy as np
if __name__=='__main__':
file = cv.FileStorage('./chapter_2/data/Myfile.xml',cv.FileStorage_WRITE)
file.write('name','张三')
file.write('age',16)
file.write('date','2019-01-01')
scores= np.array([[98,87],[66,58],[54,36]])
file.write('scores',scores)
file.release()
#读取
filel = cv.FileStorage('./chapter_2/data/Myfile.xml',cv.FileStorage_READ)
#判断是否成功打开
if filel.isOpened():
name1 = filel.getNode('name').string()
age1 = filel.getNode('age').real()
date1 = filel.getNode('date').string()
scores1 = filel.getNode('scores').mat()
print(f"姓名{name1} 年龄{age1} 记入时间{date1} 成绩单{scores1}")
else:
print('Failed')
filel.release()
3.3 结果展示
|