2015-01-08 19 views
5

Sto usando OpenCV per fare alcuni calcoli sui film che ho fatto negli esperimenti. Per fare questo ho bisogno di alcune proprietà dei film e sarebbe utile se potessi rilevarli automaticamente dal film stesso. Nel documentation trovo il seguente codice:Ottenere le proprietà del film con python e opencv

cv2.VideoCapture.get(propId) → retval 

Nell'elenco sottostante si afferma che per il numero totale di fotogrammi propId dovrebbe essere CV_CAP_PROP_FRAME_WIDTH. Tuttavia quando provo il seguente ottengo un errore:

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

Se io ingresso un intero nel codice:

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

CV_CAP_PROP_FRAME_WIDTH è il 4 ° elemento della lista nella documentazione e in effetti quando uso il contatore intero corretto 3 Ottengo questa proprietà. Mi chiedo se c'è un modo più ordinato per farlo, facendo uso della classe stessa e scrivendo un dizionario per esso con tutte le combinazioni chiave, intero.

risposta

10

I CV_CAP_PROP_* costanti sono accessibili dal modulo cv2.cv:

cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT) 

Purtroppo, non tutte le cose utili sono stati portati da cv2 da cv così è generalmente una buona idea guardare in cv2.cv se non riesci a trovare quello che stai cercando in cv2. Alcune costanti, ad esempio cv2.CV_LOAD_IMAGE_*, sono state spostate, ad esempio.

UPDATE: - Per OpenCV 3.1 uso: -

cap.get(cv2.CAP_PROP_FRAME_COUNT) 

In sostanza, il nome della proprietà è stato modificato e il "CV_" in principio non è più necessaria. (Crediti per Blane nella sezione risposte)

0

Si può fare in questo modo:

cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH) 
2

Sto usando OpenCV 3.1 e i metodi sopra suggeriti da Hannes non funzionano per me. Sembra che la chiamata al metodo e la formattazione dei nomi delle proprietà siano state leggermente aggiornate per OpenCV 3.1. Ad esempio, cap.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH) restituisce AttributeError: 'module' object has no attribute 'cv' con OpenCV 3.1. Il seguente aggiustamento minore al codice ha funzionato per me: cap.get(cv2.CAP_PROP_FRAME_WIDTH)

noti che CV_ non è più necessario come prefisso per il nome dell'attributo.