退出功能不支持';我不能用python在OpenCV中工作

退出功能不支持';我不能用python在OpenCV中工作,python,opencv,image-processing,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 whil

我只想捕获一帧,将其保存到
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()

提前感谢。

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

key = cv2.waitKey(20) & 0xFF
您还需要一个活动窗口:

注 仅当至少创建了一个HighGUI窗口且该窗口处于活动状态时,该函数才起作用。如果有多个HighGUI窗口,则其中任何一个都可以处于活动状态

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

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

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

cv::waitKey
仅在存在任何openCV窗口且可能处于活动状态时才起作用

由于您对
#cv2.namedWindow(“窗口”)
#cv2.imshow(“窗口”,帧)
进行了注释,因此没有等待键时间,也没有机会获取键

如果激活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()
导入cv2
cap=cv2.视频捕获(0)
val=False
maxTry=100#从打开的设备捕获帧的最大尝试次数
cTry=0
if cap.isOpened():#如果我们能够捕获第一帧。
而(!val)和(cTry
我不是python程序员,所以请原谅我在python3中出现的语法错误(并给我一个提示来纠正它们)

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

你确定已经到了休息时间吗?我不这么认为,ESC不工作@Vanojx1try在if语句之前在key变量上插入print语句,这样您将发现是否达到了中断(未达到)。然后你可以更新你的问题。@Bouramas,它一直在打印数字255。这样你就看到了问题@amolkulkarni。这就是为什么没有达到break语句的原因。还有其他关键点有效吗?不要与27相比,多做一次测试。使用cvw.imshow显示图像。也许窗口捕捉到了击键,什么都没有。但sameNote函数仅在至少创建了一个HighGUI窗口且该窗口处于活动状态时才起作用。如果有几个HighGUI窗口,它们中的任何一个都可以处于活动状态。这是opencv应该提供一种以编程方式激活窗口的方法的一个很好的理由!这基本上就是我建议的,显然它仍然不起作用。当我删除注释时,它就起作用了。但正如我在问题中提到的,我希望它捕获一帧并退出。