我一直在研究此代码,在这里我需要使用Raspberry pi在opencv中使用单个PiCamera同时捕获视频。还有一个朋友建议使用线程(尽管我看到有些人提到多线程在python中不起作用??),我不知道为什么,在键盘中断后使用程序中的“ q”捕获了第二个视频。 谁能帮助我找到代码出了问题的地方? 我希望同一台摄像机录制多个视频,每个视频之间有1秒的延迟。 这是代码
import cv2
import threading
import time
global tx
tx = []
def cap_1():
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out1 = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
out1.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0XFF == ord('q'):
break
else:
break
cap.release()
out1.release()
cv2.destroyAllWindows()
def cap_2():
cap2 = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out2 = cv2.VideoWriter('output1.avi',fourcc, 20.0, (640,480))
while(cap2.isOpened()):
ret, frame1 = cap2.read()
if ret == True:
out2.write(frame1)
cv2.imshow('frame1',frame1)
if cv2.waitKey(1) & 0XFF == ord('q'):
break
else:
break
cap2.release()
out2.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
t1 = threading.Thread(target=cap_1)
tx.append(t1)
print(tx)
t1.start()
t1.join()
time.sleep(1)
t2 = threading.Thread(target=cap_2)
tx.append(t2)
t2.start()
t2.join()
time.sleep(1)
答案 0 :(得分:0)
cv2.videoCapture(camIdx)
直接从设备中的摄像头获取输入,并且此时尝试拆分线程不会产生所需的结果,因为线程将被顺序化(在大多数系统中,如果并非全部),因为它们会尝试从相机捕获帧,但是您可以通过在读取帧后使用线程来实现您要执行的操作,即可以在写入文件时引入延迟。即在cap.read()
函数之后使用线程。