2016-06-27 8 views
0

Ich habe eine VideoCapture in OpenCV, kann ich ein bestimmtes Video erfolgreich anzeigen. Was ich jetzt tun möchte, ist zu pausieren und zu spielen, indem man eine Taste drückt (optional welche, solange es funktioniert). Ich habe über waitKey gelesen, aber es gibt etwas über diese ganze Sache, die ich nicht bekomme (ASCII) und wie man Schlüssel bindet. Was ich verstehe es wird verwendet, um highgui Prozess zu lassen, kann aber auch für andere Zwecke verwendet werden?Verwenden Sie waitKey in der Reihenfolge Pause und Video abspielen

Wenn es schwierig/unmöglich ist, ein Video anzuhalten und es erneut zu starten, würde ich mit einer Verzögerung nur glücklich sein, wenn die Taste gedrückt wird.

Hilfe wird sehr geschätzt!

Antwort

1

Sie brauchen nichts wie verbindliche Schlüssel. Ich habe einen Beispielcode geschrieben, der das Video wiedergibt/pausiert, wenn Sie "p" drücken.

#include <iostream> 
#include <fstream> 
#include <string> 
#include "opencv2/opencv_modules.hpp" 
#include "opencv2/highgui/highgui.hpp" 

using namespace std; 
using namespace cv; 

int main(int argc, char **argv) 
{ 
    bool playVideo = true; 
    VideoCapture cap(argv[1]); 
    if(!cap.isOpened()) 
    { 
     cout<<"Unable to open video "<<argv[1]<<"\n"; 
     return 0; 
    } 
    Mat frame; 
    while(1) 
    { 
     if(playVideo) 
      cap >> frame; 
     if(frame.empty()) 
     { 
      cout<<"Empty Frame\n"; 
      return 0; 
     } 
     imshow("Video",frame); 
     char key = waitKey(5); 
     if(key == 'p') 
      playVideo = !playVideo; 
    } 
    return 0; 
} 
+3

ich die Fahne glauben, pausieren und spielen 'playVideo' ist nicht erforderlich. 'waitKey (0)' wird auf unbestimmte Zeit angehalten, so dass es Ihre while-Schleife blockiert, bis eine Taste gedrückt wird. Dokumentation [hier] (http://docs.opencv.org/2.4/modules/highgui/doc/user_interface.html#waitkey). – Shakkhar

+0

ja waitKey (0) pausiert auf unbestimmte Zeit, aber in diesem Fall müssen Sie für jedes Bild, das angezeigt werden soll, eine Taste drücken –

1

Ich habe das gleiche Problem wie Sie zuvor. Ich habe es in Python anstelle von C++ gelöst, aber ich denke, die Logik dahinter ist dieselbe.

import cv2 
cap = cv2.VideoCapture('my.avi') 

while True: 

    ret, frame = cap.read() 
    key = cv2.waitKey(1) & 0xff 

    if not ret: 
     break 

    if key == ord('p'): 

     while True: 

      key2 = cv2.waitKey(1) or 0xff 
      cv2.imshow('frame', frame) 

      if key2 == ord('p'): 
       break 

    cv2.imshow('frame',frame) 

    if key == 27: 
     break 

cap.release() 
cv2.destroyAllWindows() 
0

Wenn Sie mit p Verwendung

if(cv::waitKey(1) == 'p') 
    while(cv::waitKey(1) != 'p'); 
Verwandte Themen