opencv读写文件操作
- 读取图像文件
- OpenCV 中使用
cv2.imread()
函数来读取图像文件。这个函数的第一个参数是图像文件的路径,第二个参数是一个可选的标志,用于指定读取图像的方式。 - 示例代码:
- OpenCV 中使用
import cv2
# 以彩色模式读取图像(这是默认模式)
img = cv2.imread('your_image.jpg', cv2.IMREAD_COLOR)
if img is None:
print("无法读取图像")
else:
print("图像读取成功,形状为:", img.shape)
- 在这个示例中,
cv2.IMREAD_COLOR
(值为 1)表示以彩色模式读取图像。如果要以灰度模式读取,可以使用cv2.IMREAD_GRAYSCALE
(值为 0),例如img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE)
。如果想读取包含 alpha 通道的图像,可以使用cv2.IMREAD_UNCHANGED
(值为 - 1)。
- 读取视频文件
- 对于视频文件,使用
cv2.VideoCapture()
函数。它可以打开视频文件或者摄像头设备。 - 示例代码:
- 对于视频文件,使用
import cv2
# 打开视频文件
cap = cv2.VideoCapture('your_video.mp4')
if not cap.isOpened():
print("无法打开视频文件")
else:
while True:
ret, frame = cap.read()
if not ret:
break
# 在这里对每一帧进行处理,例如显示
cv2.imshow('Video', frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
- 在这个示例中,
cap.read()
函数返回两个值。ret
是一个布尔值,表示是否成功读取帧,frame
是读取到的视频帧。cv2.waitKey()
函数用于等待用户按键,参数是等待的时间(以毫秒为单位),这里等待 25 毫秒。如果用户按下q
键,就退出循环。最后,cap.release()
释放视频文件资源,cv2.destroyAllWindows()
关闭所有打开的窗口。
- 写入图像文件
- 使用
cv2.imwrite()
函数来保存图像。它的第一个参数是要保存的文件路径和文件名,第二个参数是要保存的图像数据。 - 示例代码:
- 使用
import cv2
img = cv2.imread('input_image.jpg', cv2.IMREAD_COLOR)
# 进行一些图像处理,例如转换为灰度图
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 保存处理后的图像
cv2.imwrite('output_gray_image.jpg', gray_img)
- 在这个示例中,首先读取了一张彩色图像,然后使用
cv2.cvtColor()
函数将其转换为灰度图,最后将灰度图保存为一个新的文件。
- 写入视频文件
- 要写入视频文件,需要先创建一个
cv2.VideoWriter
对象。这个对象的构造函数需要指定输出视频文件的路径、视频编解码器、帧率和视频尺寸等参数。 - 示例代码:
- 要写入视频文件,需要先创建一个
import cv2
# 读取视频文件
cap = cv2.VideoCapture('input_video.mp4')
if not cap.isOpened():
print("无法打开输入视频文件")
else:
# 获取视频的帧率、尺寸等信息
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 创建VideoWriter对象,使用MJPG编解码器
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('output_video.avi', fourcc, fps, (width, height))
while True:
ret, frame = cap.read()
if not ret:
break
# 在这里可以对帧进行处理,例如添加文字或绘制图形
out.write(frame)
cap.release()
out.release()
cv2.destroyAllWindows()
- 在这个示例中,首先打开一个输入视频文件,获取其帧率、宽度和高度等信息。然后使用
cv2.VideoWriter_fourcc()
函数指定视频编解码器(这里是 MJPG),创建一个cv2.VideoWriter
对象来保存处理后的视频。在循环中,读取输入视频的每一帧,进行处理(这里只是简单地将原始帧写入输出视频),最后释放资源。
请注意,在实际使用中,你需要将代码中的your_image.jpg
、your_video.mp4
等文件路径替换为真实的文件路径。而且,在写入视频文件时,编解码器的选择要根据你的系统和需求来确定,不同的编解码器可能在不同的系统上有不同的支持情况。