CV - hw1

2018-12-09  本文已影响5人  谢小帅
  1. 视频回放:不断读取摄像头视频并回放
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()
  1. 鼠标读取:按鼠标左键,可以在视频中画红线
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()
  1. 三个功能整合
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()
上一篇 下一篇

猜你喜欢

热点阅读