恐怕我遇到了一些超出我新手能力范围的事情。问题的快速总结:我试图在实验期间(使用OpenSesame)从使用OpenCV python模块的网络摄像头捕获实时视频流。我可以让它工作,但我的问题是,代码弹出一个新窗口,显示它正在录制的直播流。我如何改变这段代码不显示实时窗口,但仍然能够按"q"关闭直播流?
import numpy as np
import cv2
subject = str(self.get('subject_nr'))
cap = cv2.VideoCapture(0)
w=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH ))
h=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT ))
#Define the codec and create VideoWriter object
#fourcc = cv2.VideoWriter_fourcc(*'DIVX')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('pathtooutput'+ subject + '.avi', -1, 20.0, (w,h))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
#Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
cv2.waitKey()
从highgui窗口捕获击键。如果不显示窗口,则不能使用waitKey
捕获击键。您将需要一些可以从终端捕获击键的东西。
对于linux,您可以使用termios
和fcntl
模块来实现这一点。下面是Python文档中的一个示例。https://docs.python.org/2/faq/library.html how-do-i-get-a-single-keypress-at-a-time