退出函数在使用python的OpenCV中不起作用

时间:2017-01-26 10:56:37

标签: python opencv image-processing

我只想捕获一帧,将其保存到test.png然后退出代码。 在这个程序中exit()不起作用,我每次都必须在终端上使用CTRL + C.

import cv2

#cv2.namedWindow("window")
cap = cv2.VideoCapture(0)

if cap.isOpened(): # if we are able to capture the first frame.
    val, frame = cap.read()
else:
    val = False
while val:
    #cv2.imshow("window", frame)
    cv2.imwrite('test.png',frame)
    val, frame = cap.read()
    key = cv2.waitKey(20)
    if key == 27: # exit on ESC
        break

cap.release
cv2.destroyAllWindows()
exit()

提前致谢。

4 个答案:

答案 0 :(得分:0)

尝试添加& 0xFF到等待键:

key = cv2.waitKey(20) & 0xFF

您还需要一个活动窗口:

  

请注意   该功能仅在至少创建一个HighGUI窗口且窗口处于活动状态时才有效。如果有多个HighGUI窗口,则其中任何一个都可以处于活动状态。

答案 1 :(得分:0)

方法waitkey(t)以毫秒为单位等待t,因此对于每个循环按键,代码等待20 ms。考虑到你的

cv2.imwrite('test.png',frame)

可能需要一些时间才能写入文件,您是否可能在错误的时刻按下退出键?

答案 2 :(得分:0)

cv::waitKey仅在任何openCV窗口存在且可能处于活动状态时才有效。

由于您评论了#cv2.namedWindow("window")#cv2.imshow("window", frame),因此没有waitKey时间,也没有机会获取密钥。

如果激活namedWindow和imshow,它会起作用吗?

确保另外尝试

if key > 0: # exit on ESC
    break

取消任意按键(但你仍需要一个活动的openCV窗口)

要捕获单个帧,请尝试以下方法:

import cv2

cap = cv2.VideoCapture(0)

val = False
maxTry = 100 # maximum number of tries to capture a frame from an opened device
cTry = 0

if cap.isOpened(): # if we are able to capture the first        frame.
    while (!val) and (cTry < maxTry)
        val, frame = cap.read()
        cTry = cTry + 1
else:
    val = False
if val:
    cv2.imwrite('test.png',frame)
else:
    print "No image captured"

cap.release
exit()

我不是python程序员所以请原谅我任何语法错误(并给我一些提示来纠正它们)

答案 3 :(得分:0)

for python3

cv2.imshow('imafast', frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
    break