opencv入门基础(二)视频的基本操作
一.从摄像头读取实时视频
从电脑自带摄像头获取视频并将其转化为灰度视频一同输出。
import cv2
import argparse
# 获取参数
parser = argparse.ArgumentParser()
# 添加参数
parser.add_argument("index_camera",help="the camera",type=int)
# 解析参数
args = parser.parse_args()
print("the camera index:",args.index_camera) # 如果是0,则为电脑自己的摄像头
# 捕获摄像头的视频
capture = cv2.VideoCapture(args.index_camera)
# 获取帧的宽度
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH)
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT)
# 获知一秒钟内有多少帧数
fps = capture.get(cv2.CAP_PROP_FPS)
print("帧的宽度:{}".format(frame_width))
print("帧的高度:{}".format(frame_height))
print("帧数:{}".format(fps))
# 判断摄像头是否打开
if capture.isOpened() is False:
print("Camera Error!")
# 从摄像头读取视频,直到关闭
while capture.isOpened():
ret , frame = capture.read()
# 把捕获的帧变成灰度
gray_frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
# 显示视频流![在这里插入图片描述](https://img-blog.csdnimg.cn/2020121709274682.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg0ODQzNg==,size_16,color_FFFFFF,t_70)
cv2.imshow("frame",frame)
cv2.imshow("gray frame",gray_frame)
# 键盘输入”q“,则退出关闭摄像头
if cv2.waitKey(20) & 0xFF == ord('q'):
break
# 释放资源
capture.release()
# 关闭窗口
cv2.destroyAllWindows()
终端运行:
python 文件名称.py 0 # 0为电脑自带摄像头的摄像头编号,可以修改
二.读取本地视频内容
获取播放本地视频文件。
import cv2
import argparse
# 获取参数
parser = argparse.ArgumentParser()
# 添加参数
parser.add_argument("video_path",help="the path to the video file")
# 解析参数
args = parser.parse_args()
# 加载视频文件
capture = cv2.VideoCapture(args.video_path)
# 读取视频
ret,frame = capture.read() # ret是否读取到了帧
while ret:
cv2.imshow("video",frame)
ret,frame = capture.read()
if cv2.waitKey(20) & 0xFF == ord('q'): # 当键盘按下q键时退出
break
capture.release()
cv2.destroyAllWindows()
终端Terminal里面输入:
python 文件名称.py 视频文件名称.后缀
三.保存摄像头录制的一段视频到本地
获取电脑摄像头,录制一段视频并将其保留下来的流程如下:
程序实现代码为:
import cv2 as cv
cap = cv.VideoCapture(0)
# 指定VideoWriter的fourCC视频编码
fourcc = cv.VideoWriter_fourcc(*"DIVX")
# 指定输出文件、fourCC视频编码、FPS帧率、画面大小
out = cv.VideoWriter('output.avi',fourcc,20.0,(640,480))
while cap.isOpened():
ret , frame = cap.read()
if not ret:
print("无法打开摄像头")
break
# 对画面帧进行反转处理
frame = cv.flip(frame,0)
# 将处理后的画面帧保存至output文件中
out.write(frame)
# 将处理后的画面帧显示在窗口中
cv.imshow("frame",frame)
# 获取键盘按键动作,如果按下q键,就跳出循环
if cv.waitKey(1) == ord("q"):
break
cap.release()
out.release()
cv.destroyAllWindows()