- 视频回放:不断读取摄像头视频并回放
import cv2
"""
视频回放:不断读取摄像头视频并回放
"""
cap = cv2.VideoCapture(0)
video_w = 640
video_h = 480
cap.set(3, video_w)
cap.set(4, video_h)
while cap.isOpened():
ret, frame = cap.read()
if ret:
cv2.imshow('video', frame)
if cv2.waitKey(10) & 0xFF == 27: # esc 退出
break
cv2.destroyAllWindows()
cap.release()
2.键盘读取:按空格键开始录视频,再按空格键录视频停止
import cv2
import datetime
"""
键盘读取:按空格键开始录视频,再按空格键录视频停止
"""
cap = cv2.VideoCapture(0)
video_w = 640
video_h = 480
cap.set(3, video_w)
cap.set(4, video_h)
# 设置视频的四字符代码
fourcc = cv2.VideoWriter_fourcc(*'XVID') # FourCC: Four-Character Codes 视频四字符代码
RECORD = False
vw = None
cnt = 0
while cap.isOpened():
ret, frame = cap.read()
if ret:
cv2.imshow('video', frame)
if cv2.waitKey(1) & 0xFF == ord(' '):
print('press space')
RECORD = not RECORD
if RECORD:
# 第1次按下空格,create VideoWriter
cnt += 1
vname = datetime.datetime.now().strftime('%Y%m%d_%H%M%S') + '.avi'
vw = cv2.VideoWriter(vname, fourcc, 10, (video_w, video_h))
print('record', cnt)
else:
# 第2次按下空格,release VideoWriter
if vw:
vw.release()
print('close', cnt)
if RECORD:
vw.write(frame)
if cv2.waitKey(10) & 0xFF == 27: # esc 退出
break
cv2.destroyAllWindows()
cap.release()
- 鼠标读取:按鼠标左键,可以在视频中画红线
import cv2
"""
鼠标读取:按鼠标左键,可以在视频中画红线
"""
cap = cv2.VideoCapture(0)
video_w = 640
video_h = 480
cap.set(3, video_w)
cap.set(4, video_h)
pts = []
def save_line_pts(event, x, y, LBUTTONDOWNs, param):
global pts
if event == cv2.EVENT_LBUTTONDOWN:
pts.append((x, y))
elif event == cv2.EVENT_MOUSEMOVE and LBUTTONDOWNs == cv2.EVENT_FLAG_LBUTTON:
pts.append((x, y))
cv2.namedWindow('video')
cv2.setMouseCallback('video', save_line_pts)
while cap.isOpened():
ret, frame = cap.read()
# 先划线 再显示frame
for i in range(len(pts) - 1):
cv2.line(frame, pts[i], pts[i + 1], (0, 0, 255), 3)
cv2.imshow('video', frame)
if cv2.waitKey(10) & 0xFF == 27: # esc 退出
break
cv2.destroyAllWindows()
cap.release()
- 三个功能整合
import cv2
import datetime
"""
proj1
1.视频回放:不断读取摄像头视频并回放
2.键盘读取:按空格键开始录视频,再按空格键录视频停止
3.鼠标读取:按鼠标左键,可以在视频中画红线
"""
cap = cv2.VideoCapture(0)
video_w = 640
video_h = 480
cap.set(3, video_w)
cap.set(4, video_h)
pts = []
def save_line_pts(event, x, y, LBUTTONDOWNs, param):
global pts
if event == cv2.EVENT_LBUTTONDOWN:
pts.append((x, y))
elif event == cv2.EVENT_MOUSEMOVE and LBUTTONDOWNs == cv2.EVENT_FLAG_LBUTTON:
pts.append((x, y))
cv2.namedWindow('video')
cv2.setMouseCallback('video', save_line_pts)
# 设置视频的四字符代码
fourcc = cv2.VideoWriter_fourcc(*'XVID') # FourCC: Four-Character Codes 视频四字符代码
RECORD = False
vw = None
cnt = 0
while cap.isOpened():
ret, frame = cap.read()
if ret:
# 先划线 再显示frame
for i in range(len(pts) - 1):
cv2.line(frame, pts[i], pts[i + 1], (0, 0, 255), 3)
cv2.imshow('video', frame)
# 按下空格键 开始一个视频的录制
if cv2.waitKey(1) & 0xFF == ord(' '):
print('press space')
RECORD = not RECORD
if RECORD:
# 第1次按下空格,create VideoWriter
cnt += 1
vname = datetime.datetime.now().strftime('%Y%m%d_%H%M%S') + '.avi'
vw = cv2.VideoWriter(vname, fourcc, 10, (video_w, video_h))
print('record', cnt)
else:
# 第2次按下空格,release VideoWriter
if vw:
vw.release()
print('close', cnt)
pts = [] # 点集置空,重新开始
if RECORD:
vw.write(frame)
if cv2.waitKey(10) & 0xFF == 27: # esc 退出
break
cv2.destroyAllWindows()
cap.release()
网友评论