Python 当视频以OpenCV VideoCapture结束时,单击两个键关闭视频

Python 当视频以OpenCV VideoCapture结束时,单击两个键关闭视频,python,opencv,video,video-processing,Python,Opencv,Video,Video Processing,我试图在视频结束时使用OpenCV(Python)单击两个键(n和p)来关闭视频。 但是,我不明白为什么在循环的末尾添加特定的行是不起作用的。 事实上,使用此特定代码: import cv2 import numpy as np # Create a VideoCapture object and read from input file cap = cv2.VideoCapture('randomvideo.mpg') # Check if video opened successfull

我试图在视频结束时使用OpenCV(Python)单击两个键(n和p)来关闭视频。 但是,我不明白为什么在循环的末尾添加特定的行是不起作用的。 事实上,使用此特定代码:

import cv2
import numpy as np

# Create a VideoCapture object and read from input file
cap = cv2.VideoCapture('randomvideo.mpg')

# Check if video opened successfully
if (cap.isOpened()== False): 
  print("Error opening file")

# Read until video is completed
while(cap.isOpened()):
  # Capture frame-by-frame
  ret, frame = cap.read()
  if ret == True:

    # Display the resulting frame
    cv2.imshow('Frame',frame)
    cv2.waitKey(25)

我可以在播放结束时锁定视频,但通过添加以下内容:

# Break the loop
  else:
    if 0xFF == (ord('n')) or 0xFF == (ord('p')):
       break
我按两个键都关不上

有什么建议吗

还有,有没有办法记录下按下了哪个键


提前谢谢

您可以通过检查
cv2.waitKey()中的返回值来记录按下了哪个键。从:

它返回按下的键的代码,如果在指定时间之前没有按下任何键,则返回-1

因此,您可以检查是否像这样按下
n
p

key = cv2.waitKey(25)
if key == ord('n') or key == ord('p'):
    break

这是您的代码的工作版本

import cv2

cap = cv2.VideoCapture('randomvideo.mpg')

if not cap.isOpened():
    print("Error opening file")

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret:
        cv2.imshow('frame',frame)
    key = cv2.waitKey(25)
    if key == ord('n') or key == ord('p'):
        break

最后一个问题:当我将行打印(键)添加到此代码中以获得按下键的返回值时,结果始终为-1。我的目标是获得“p”或“n”(在视频末尾按下),但我无法做到这一点。建议?如果没有按键,则值应为
-1
。当按下
p
时,我得到
112
,当按下
n
时,我得到110。也许它打印得太快了以至于你错过了关键代码?