下面展示一些 内联代码片
。
多线程实现同步摄像头拍摄照片(Multi-threading to achieve synchronized camera shooting photos)
// An highlighted block
import cv2
import multiprocessing
import time
img_path='C:/Robot/pic/123.jpg'
#Save picture function
def SavePicture(port,status,number):
folder = "C:/Robot/pic/"
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)
size = (int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fourcc = cv2.VideoWriter_fourcc(*'XVID') # The encoding of the saved video
cameraCapture.set(cv2.CAP_PROP_FOURCC, fourcc) # Video stream format
if cameraCapture.isOpened():
while True:
success, frame = cameraCapture.read()
print(status.value)
if (status.value==1):
path = folder + "camera_" + str(port) + "_" + str(number.value) + ".jpg"
cv2.imwrite(path, frame)
print("snapshot saved into: " + path)
number.value+= 1
status.value = 0
elif(status.value==2):
break
title = "image"+ str(port)
cv2.imshow(title, frame)
cv2.waitKey(10)
cameraCapture.release()
else:print('Camera reading failed')
#Change status to start taking pictures
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('s'):
print('Start syncing photos')
status.value = 1
elif key == ord('q'): # End the program
status.value = 2
break
if __name__ == '__main__':
status = multiprocessing.Value('i', 0) # Shared memory variable
number=multiprocessing.Value('i', 1)
act2 = multiprocessing.Process(target=active, args=(status,))
act2.start()
time.sleep(1)
#Multi-process call camera and save pictures
cam1 = multiprocessing.Process(target=SavePicture, args=(0,status,number))
cam1.start()
time.sleep(5)
cam2 = multiprocessing.Process(target=SavePicture, args=(1,status,number))
cam2.start()
cv2.destroyAllWindows()