【问题标题】:OpenCV webcam captureOpenCV 网络摄像头捕获
【发布时间】:2015-08-18 08:49:51
【问题描述】:

恐怕我遇到了一些超出我新手能力范围的事情。问题的快速总结:我正在尝试在实验期间(使用 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('path\to\output'+ 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.imshow('frame',frame)并尝试if( (cv.waitKey(1) & 0xFF == ord('q') ) break;
  • 啊,谢谢你的回复!我们越来越近了!代码运行并记录,但我仍然无法使用按键释放作业。
  • 您可以在控制台激活的情况下尝试击键吗?
  • 不幸的是,控制台仍处于活动状态。它只是冻结了,我必须退出才能停止脚本。

标签: python opencv


【解决方案1】:

cv2.waitKey() 捕获来自 highgui 窗口的击键。如果您从不显示窗口,则不能使用waitKey 来捕获击键。您将需要一些可以从终端捕获击键的东西。

对于 linux,您可以使用 termiosfcntl 模块实现此目的。这是 Python 文档中的一个示例。 https://docs.python.org/2/faq/library.html#how-do-i-get-a-single-keypress-at-a-time

【讨论】:

  • 感谢您的提醒!因此,我进行了一些互联网搜索,并且能够使脚本与 msvcrt.kbhit() 一起使用(我在 Windows 上),但现在的问题是它没有将网络摄像头流保存到指定位置。我觉得我是如此接近,或者只是对这里的一个明显错误视而不见。我所做的只是在out.write(frame)下方插入if msvcrt.kbhit(): if (msvcrt.getch() == "q"): break
  • @DrPineapple 我不确定,但也许你也需要 videowriter 的 waitKey。尝试将此语句移到 waitKey 语句下方。再一次,这只是一个猜测。
猜你喜欢
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多