python - OpenCV 录制视频并绘制 LED 的位置
问题描述
我正在制作一个应用程序,记录用户在不同 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
循环结合起来进行视频录制。任何帮助表示赞赏。
解决方案
如果是切换的时刻,请检查每次迭代的时间:
import time
p_time = time.time()
on = False
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
c_time = time.time()
if on:
frame = cv2.circle(frame, (100, 100), 10, (0, 255, 0), 3)
if c_time - p_time > 1:
on = not on
if on:
pixels[3] = (255,0,0)
else:
pixels[3] = (0,0,0)
p_time = c_time
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
推荐阅读
- javascript - 我想在 google sheet script forEach 循环中添加 2 mint 延迟以发送电子邮件,但 setTimeout 和 sleep 不起作用
- python - 授予对 mac 上多个文件的访问权限
- android - 使用 --no-sound-null-safety Flutter 生成 App Bundle
- github - 我可以在 github 中更改 PR 的基本分支吗?
- javascript - JavaScript 对象数组:删除具有重复属性的对象。相同的条件有不同的输出
- sql-server - 从 Excel 或 XML 粘贴到 TSQL 查询的文本中可能出现的(不可见的)字符
- python - 打印字符串列表的原始字符串值的长度
- javascript - 地图宽度变化时的openlayers map.updateSize
- entity-framework - 如何使用 ASP.NET EF Core Pomelo 映射 MySql 用户定义的函数
- scala - 完成 Source[ByteString, _] 时如何覆盖响应状态码?