2012-07-05 6 views
5

Sto usando il seguente codice per accedere al mio webcam utilizzando OpenCV + python ...I problemi che utilizzano webcam in Python + OpenCV

import cv 

cv.NamedWindow('webcam_feed', cv.CV_WINDOW_AUTOSIZE) 

cam = cv.CaptureFromCAM(-1) 

sto quindi ottenendo il seguente errore nella console ...

VIDIOC_QUERYMENU: Invalid argument 
VIDIOC_QUERYMENU: Invalid argument 
VIDIOC_QUERYMENU: Invalid argument 

mi è stato originariamente usando,

cv.CaptureFromCAM(0) 

per accedere allo stesso e ha avuto lo stesso problema e utilizzato -1 perché è Suppos e per prendere qualsiasi webcam.

Ho anche provato a vedere se Ubuntu riconosce la webcam e lo fa. Sto usando v4l2 per la webcam.

{EDIT}

Sto usando il seguente codice per visualizzare un feed video, sembra essere solo mostrando una sola immagine della web cam catturato invece di un feed video continua ...

import cv 
cv.NamedWindow('webcam_feed', cv.CV_WINDOW_AUTOSIZE) 
cam = cv.CaptureFromCAM(-1) 
feed = cv.QueryFrame(cam) 
cv.ShowImage("webcam_feed", feed) 
cv.WaitKey(-1) 
+0

Ottengo lo stesso errore, ma funziona correttamente. Ottengo un'immagine corretta dalla webcam. La tua webcam funziona correttamente? Hai l'immagine corretta? – Froyo

+0

Lo stesso per me. Ma come ha detto Froyo, funziona bene e ottiene immagini corrette. Hai capito? –

+0

Ok, si sta visualizzando nella finestra che ho creato ... Ma si è verificato un nuovo problema, per favore vedi le modifiche che ho apportato al post originale ... –

risposta

0

credo che hai bisogno di mettere

frame = cv.QueryFrame(cam) 
cv.ShowImage("Webcam Feed", frame) 

in un ciclo per aggiornare continuamente l'immagine mostrata nella finestra. Cioè, il frame da cv.QueryFrame è un'immagine statica, non un video continuo.

Se si desidera essere in grado di uscire premendo un tasto, testare cv.WaitKey con un piccolo timeout nel ciclo.

+0

Grazie, in realtà ho appena capito dopo aver scavato alcuni esempi ... apprezzo molto la risposta. –

1

WOW, ho risposto alla mia domanda in 15 dopo averlo postato. Ho fatto qualche ricerca e la ragione per la web cam solo afferrando una sola immagine è a causa della ...

cv.WaitKey(-1) 

Questo non consente il contenuto della finestra per aggiornare. Ho impostato il numero su 10 ...

cv.WaitKey(10) 

e ha funzionato magnificamente. Ho anche provato 100, ma non ho visto alcuna differenza. Ho visto solo una differenza quando il numero era 1000. Io uso 1 perché sembra che funzioni al meglio.

Ecco il codice completo per visualizzare un feed web cam

import cv 

cv.NamedWindow("webcam", 1) 

cam = cv.CaptureFromCAM(-1) 

While True: 
feed = cv.QueryFrame(cam) 
cv.ShowImage("webcam", feed) 
cv.WaitKey(1) 
+0

può essere che ti servono le 2 linee sotto il blocco del tempo rientrato? cv.WaitKey attende che tu preme un tasto – luismesas

+0

Questo non sembra risolvere la stampa di 'VIDIOC_QUERYMENU: argomento non valido'. Hai risolto questo alla fine? – elaRosca

0

Per me, il comando in radice

xhost +

salvare il mio tempo, noti per chiudere e aprire il nuovo terminal .

Ci vediamo.