如何使用python cv2逐帧显示视频(通过按键)?

时间:2019-01-22 11:24:55

标签: python video cv2

我正在尝试打开视频文件并使用按键逐帧播放。因此它将打开并无限期显示单个帧,直到按下特定的键,然后它将切换到下一帧。

我正在使用python3和cv2。这是我第一次使用cv2,因此欢迎任何更正/建议。

以下代码的工作方式是一次显示一帧视频,不仅是当我按 k 时,而且是按任意键时,它都忽略了 q 退出。

HttpHeaders headers = new HttpHeaders();
        headers.add(HttpHeaders.CONTENT_TYPE, "text/xml;charset=UTF-8");
        headers.add("SOAPAction", "urn:creditCard#creditCard");
        headers.set("Accept", "text/xml;charset=UTF-8");
        headers.set("Accept-Language", "en-GB");
        headers.set("Content-Language", "en-GB");
        headers.setAcceptCharset(Arrays.asList(Charset.forName("UTF-8")));


        HttpEntity<String> requestEntity = new HttpEntity<String>(xmlText, headers);

//      RequestEntity<String> soapRequest = null;
//      try {
//          soapRequest = RequestEntity.post(new URI(defaultUri)).contentType(MediaType.TEXT_XML)
//                  .accept(MediaType.TEXT_XML).acceptCharset(Charset.forName("UTF-8"))
//                  .header("SOAPAction", "urn:creditCard#creditCard").body(xmlText);
//      } catch (URISyntaxException e) {
//          throw new BaseException("Service is Unavailable at this Moment. Please check later!!");
//      }
        ResponseEntity<String> response = null;
        try {
            response = restTemplate.exchange(new URI(defaultUri), HttpMethod.POST, requestEntity, String.class);
log.info("Succesfully Response Recieved ....Credit Limit API RAW Response  : " + response.getBody());
......

我想按一个特定的键前进(也可以向后移动一个键,但这可能是另一个问题),并且可以按 q 退出。

有什么建议吗?预先谢谢你!

1 个答案:

答案 0 :(得分:1)

您从未遇到过cv2.waitKey(00) == ord('k')条件。实际上,该行计算TrueFalse,然后将其丢弃。 您希望它停止什么,直到用户按下'q''k'

while video.isOpened():
    # Read video capture
    ret, frame = video.read()
    # Display each frame
    cv2.imshow("video", frame)
    # show one frame at a time
    key = cv2.waitKey(0)
    while key not in [ord('q'), ord('k')]:
        key = cv2.waitKey(0)
    # Quit when 'q' is pressed
    if key == ord('q'):
        break