【发布时间】:2020-12-26 06:31:01
【问题描述】:
我正在制作一个应用程序,用于记录用户在不同 LED 发光过程中的面部表情。用户站在设备前面,角落的 4 个 LED 轮流点亮和熄灭。我正在使用 adafruit neopixel 库执行此操作。这工作正常。我的下一个目标是让记录的图像在对应于当前打开的 LED 的帧中画一个小圆圈。因此,如果右上角的 LED 亮起,我希望在框架的右上角画一个小圆圈,指示哪个 LED 处于活动状态。在查看常规网络摄像头镜头时,我也可以很好地在帧上绘图。
但是,我的问题是将两者结合起来。如果我运行一个循环来处理帧,那么我就无法准确控制 LED 的时序。如果我设置延迟或睡眠功能以按照需要的方式对 LED 进行计时,那么处理帧的循环也会停止。如果我把循环放在脚本的顶部,它永远不会调用函数来闪烁 LED,因为它永远不会从while True 中断,如果我把它放在底部,LED 在视频捕获开始之前通过它们的函数闪烁。
所以对于普通的网络摄像头视频:
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
让一个 LED 闪烁 3 次:
def blinkTopRight():
pixels[3] = (255,0,0)
sleep(1)
pixels[3] = (0,0,0)
sleep(1)
pixels[3] = (255,0,0)
sleep(1)
pixels[3] = (0,0,0)
sleep(1)
pixels[3] = (255,0,0)
sleep(1)
pixels[3] = (0,0,0)
sleep(1)
我的目标是在 LED 亮起时有这样的东西:
pixels[3] = (255,0,0)
frame = cv2.circle(frame, (100,100), 10, (0, 255, 0), 3)
cv2.imshow("Vid", frame)
然后当它关闭时,没有绘图:
pixels[3] = (0,0,0)
cv2.imshow("Vid", frame)
但显然这不起作用,我不知道如何将定时闪烁与无限 while True 循环结合起来进行视频录制。任何帮助表示赞赏。
【问题讨论】: