参考链接: Getting Started with Videos
调用摄像头,并显示视频:
import numpy as np
import cv2 as cv
# cap = cv.VideoCapture(-1)
# cap = cv.VideoCapture(1)
cap = cv.VideoCapture(0) # 传入一个设备索引,代表不同的摄像头,或者传入一个视频文件名
# cap = cv.VideoCapture('testVideo.mp4')
if not cap.isOpened():
print("Cannot open camera")
exit()
width = cap.get(cv.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv.CAP_PROP_FRAME_HEIGHT)
print('宽度和高度分别是:', width, height) # 宽度和高度分别是: 640.0 480.0
ret = cap.set(cv.CAP_PROP_FRAME_WIDTH,320) # 设定宽度
ret = cap.set(cv.CAP_PROP_FRAME_HEIGHT,240) # 设定高度
while True:
# Capture frame-by-frame
ret, frame = cap.read() # 返回True或者False,如果读取正确是True,可以用False来判断是否到达视频的末尾
# if frame is read correctly ret is True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
# Our operations on the frame come here
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
# Display the resulting frame
cv.imshow('LinMaZi-frame-LinZuQuan', gray) # 设定显示窗口标题文字
if cv.waitKey(1) == ord('q'): # 判断用户是否输入q键
break
# When everything done, release the capture
cap.release() # 释放资源
cv.destroyAllWindows()
读取视频文件并显示:
import numpy as np
import cv2 as cv
cap = cv.VideoCapture('毕业晚会.MP4')
# cap = cv.VideoCapture(0)
while cap.isOpened():
ret, frame = cap.read()
# if frame is read correctly ret is True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('frame', gray)
if cv.waitKey(25) == ord('q'): # 选择合适的刷新时间间隔,25毫秒还不错
break
cap.release()
cv.destroyAllWindows()
调用摄像头并显示,保存为视频文件:
import numpy as np
import cv2 as cv
import time
cap = cv.VideoCapture(0)
# Define the codec and create VideoWriter object
fourcc = cv.VideoWriter_fourcc(*'XVID') # 两者等效
# fourcc = cv.VideoWriter_fourcc('X','V','I','D') # 两者等效
saveTime = time.strftime("%Yy-%mm-%dd@%Hh%Mm%Ss", time.localtime())
out = cv.VideoWriter('output_' + saveTime + '.mp4', fourcc, 20.0, (640, 480))
# 参数说明 output file name, FourCC code, frames per second (fps), frame size
while cap.isOpened():
ret, frame = cap.read()
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
# frame = cv.flip(frame, 1) # 左右横向翻转
frame = cv.flip(frame, 0) # 上下纵向翻转
# write the flipped frame
out.write(frame)
cv.imshow('LinMaZi-frame-LinZuQuan', frame)
if cv.waitKey(1) == ord('q'):
break
# Release everything if job is finished
cap.release()
out.release()
cv.destroyAllWindows()