您的位置:

OpenCV中的cv2.save()

一、保存图像

cv2.save()是OpenCV中常用的一个函数,可以用于保存图像文件。通过这个函数,我们可以将处理后的图像保存下来,以后可以随时使用。在图像处理中,这是非常必要且常用的一个操作。下面来看一下如何使用cv2.save()保存图像。代码如下:


import cv2

# 读取图像
img = cv2.imread('image.jpg')

# 保存图像
cv2.imwrite('new_image.jpg', img)

首先,我们使用cv2.imread()函数读取了一张图像文件,然后使用cv2.imwrite()函数保存图像文件。函数的第一个参数是保存文件的名称(包含路径),第二个参数是我们要保存的图像。通过这个函数,我们可以将处理后的图像保存为JPG、PNG等格式。

二、保存视频

除了可以保存图像,还可以使用cv2.save()函数保存视频文件。在视频处理和分析中,这也是常用的一个操作。下面看一下如何使用cv2.save()保存视频文件。代码如下:


import cv2

# 读取视频
video = cv2.VideoCapture('video.avi')

# 获取视频帧率
fps = video.get(cv2.CAP_PROP_FPS)

# 获取视频尺寸
size = (int(video.get(cv2.CAP_PROP_FRAME_WIDTH)), int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)))

# 定义视频编码器
fourcc = cv2.VideoWriter_fourcc(*'XVID')

# 创建VideoWriter对象
writer = cv2.VideoWriter('new_video.avi', fourcc, fps, size)

# 读取并保存视频帧
while True:
    ret, frame = video.read()
    if ret:
        writer.write(frame)
    else:
        break

# 释放资源
video.release()
writer.release()

首先,我们使用cv2.VideoCapture()函数打开一段视频文件,然后使用cv2.CAP_PROP_FPS获取视频帧率,使用cv2.CAP_PROP_FRAME_WIDTH和cv2.CAP_PROP_FRAME_HEIGHT获取视频尺寸。然后,我们定义一个视频编码器,这里使用的是XVID视频编码器(也可以使用其他视频编码器),并使用cv2.VideoWriter()函数创建一个VideoWriter对象。最后,使用while循环读取视频帧并保存到新的视频文件中,直到读取完所有帧为止。注意,每一帧都需要调用writer.write()函数进行保存。最后,释放资源。

三、保存摄像头视频

除了可以保存已有的视频文件,还可以使用cv2.save()函数保存摄像头视频。这个操作也很常用,比如我们要在摄像头录制视频时,即时保存视频文件。下面看一下如何使用cv2.save()保存摄像头视频。代码如下:


import cv2

# 打开摄像头
cap = cv2.VideoCapture(0)

# 获取摄像头的帧率
fps = int(cap.get(cv2.CAP_PROP_FPS))

# 获取摄像头的尺寸
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))

# 定义视频编码器
fourcc = cv2.VideoWriter_fourcc(*'XVID')

# 创建VideoWriter对象
writer = cv2.VideoWriter('camera_video.avi', fourcc, fps, size)

# 读取并保存视频帧
while True:
    ret, frame = cap.read()
    cv2.imshow('frame', frame)
    writer.write(frame)
    if cv2.waitKey(1) == ord('q'):
        break

# 释放摄像头及资源
cap.release()
writer.release()
cv2.destroyAllWindows()

首先,我们使用cv2.VideoCapture()函数打开摄像头,并使用cv2.CAP_PROP_FPS和cv2.CAP_PROP_FRAME_WIDTH、cv2.CAP_PROP_FRAME_HEIGHT获取摄像头的帧率和尺寸。然后,我们同样定义一个视频编码器和一个VideoWriter对象,用于保存摄像头视频。在while循环中,我们使用cap.read()函数读取摄像头的每一帧,并使用cv2.imshow()函数显示摄像头图像。然后,每一帧都需要调用writer.write()函数进行保存。当用户按下“q”键时,程序退出while循环,并释放摄像头及资源。

四、保存音频

除了保存图像和视频外,cv2.save()函数还可以保存音频文件。在音频处理和编辑中,这也是常用的操作。下面看一下如何使用cv2.save()保存音频文件。代码如下:


import numpy as np
import soundfile as sf

# 读取音频文件
data, sample_rate = sf.read('audio.wav')

# 生成新的音频数据
new_data = np.zeros_like(data)

# 保存音频文件
sf.write('new_audio.wav', new_data, sample_rate)

首先,我们使用soundfile库的sf.read()函数读取一段音频文件,然后使用np.zeros_like()函数生成新的音频数据(这里将所有数据都设置为0)。最后,使用soundfile库的sf.write()函数保存音频文件。函数的第一个参数是保存文件的名称(包含路径),第二个参数是要保存的音频数据,第三个参数是音频的采样率。