我只想捕获一帧,将其保存到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()
提前致谢。
答案 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