2015-01-08 13 views
5

Używam OpenCV do wykonywania obliczeń filmów, które zrobiłem w eksperymentach. Aby to zrobić, potrzebuję niektórych właściwości z filmów i byłoby to przydatne, gdybym mógł automatycznie wykryć je z samego filmu. W documentation znajdę następujący kod:Uzyskiwanie właściwości filmu za pomocą pythona i opencv

cv2.VideoCapture.get(propId) → retval 

na poniższej liście stwierdza, że ​​do całkowitej liczby ramek propId powinny być CV_CAP_PROP_FRAME_WIDTH. Jednak gdy próbuję następujące pojawia się błąd:

>> cap = cv2.VideoCapture('runoff.MOV') 
>> print cap.get('CV_CAP_PROP_FRAME_WIDTH') 
TypeError: an integer is required 

Gdybym wejścia liczbę całkowitą w kodzie:

>> cap = cv2.VideoCapture('runoff.MOV') 
>> print cap.get(3) 
1920.0 

CV_CAP_PROP_FRAME_WIDTH jest 4 pozycja w wykazie zawartym w dokumentacji i rzeczywiście, gdy używam poprawny licznik całkowity 3 Otrzymuję tę właściwość. Zastanawiam się, czy jest na to lepszy sposób, wykorzystując samą klasę i pisząc do niej słownik ze wszystkimi kluczowymi, całkowitymi kombinacjami.

Odpowiedz

10

W CV_CAP_PROP_* stałe można uzyskać z modułu cv2.cv:

cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT) 

Niestety, nie wszystkie przydatne rzeczy zostały przeniesione z cv2 z cv tak na ogół dobrym pomysłem jest zaglądanie do cv2.cv, jeśli nie możesz znaleźć tego, czego szukasz w cv2. Niektóre stałe, takie jak cv2.CV_LOAD_IMAGE_* zostały przeniesione, na przykład.

UPDATE: - Dla OpenCV 3.1 użytku: -

cap.get(cv2.CAP_PROP_FRAME_COUNT) 

Zasadniczo nazwa Obiekt został zmodyfikowany i nie jest już wymagana "CV_" na początku. (Kredyty do Blane w sekcji odpowiedzi)

0

Można to zrobić tak:

cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH) 
2

Używam OpenCV 3.1, a powyższe metody sugerowane przez Hannesa nie działają dla mnie. Wygląda na to, że wywołanie metody i formatowanie nazw właściwości zostały nieznacznie zaktualizowane dla OpenCV 3.1. Na przykład cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH) zwraca AttributeError: 'module' object has no attribute 'cv' z OpenCV 3.1. Następujące pomniejsze zmiany kodu zadziałały: cap.get(cv2.CAP_PROP_FRAME_WIDTH)

Należy pamiętać, że CV_ nie jest już konieczne jako przedrostek nazwy atrybutu.

Powiązane problemy