下面展示一些 内联代码片
。
多线程实现同步摄像头录像(Multi-threading to achieve synchronized camera recording)
import cv2
import multiprocessing
import time
def SaveVideo(port,status):
#global status
cameraCapture = cv2.VideoCapture(port + cv2.CAP_DSHOW)
#Set the length and height of the video
cameraCapture.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cameraCapture.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
fps = cameraCapture.get(cv2.CAP_PROP_FPS)
size = (int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print(size)
fourcc = cv2.VideoWriter_fourcc(*'XVID') # The encoding of the saved video
videoWriter = cv2.VideoWriter('C:/Robot/pic/record_'+ str(port)+'.avi', fourcc, 30, size)
if cameraCapture.isOpened():
while True:
success, frame = cameraCapture.read()
print(status.value)
if (status.value==1):
videoWriter.write(frame)
elif(status.value==2):
break
title = "image"+ str(port)
cv2.imshow(title, frame)
cv2.waitKey(10)
#numFrame -= 1
#print(numFrame)
cameraCapture.release()
else:print('Camera reading failed')
#Change status to start recording
def active(status):
while True:
#print(statimg=cv2.imread(img_path)
img=cv2.imread(img_path)
cv2.imshow('img',img)
key=cv2.waitKey(10)& 0xff
if key == ord('b'):
print('Start recording')
status.value = 1
elif key == ord('s'):
print('Stop recording')
status.value = 0
elif key == ord('q'): # Exit video
status.value = 2
break
if __name__ == '__main__':
status = multiprocessing.Value('i', 0)
act2 = multiprocessing.Process(target=active, args=(status,))
act2.start()
time.sleep(1)
cam1 = multiprocessing.Process(target=SaveVideo, args=(0,status))
cam1.start()
time.sleep(5)
cam2 = multiprocessing.Process(target=SaveVideo, args=(1,status))
cam2.start()
cv2.destroyAllWindows()