2012-07-05 70 views
5

estoy usando el siguiente código para acceder a mi cámara web usando OpenCV + pitón ...Problemas en el uso de cámaras web en Python + OPENCV

import cv 

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

cam = cv.CaptureFromCAM(-1) 

entonces estoy recibiendo el siguiente error en la consola ...

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

que estaba usando un principio,

cv.CaptureFromCAM(0) 

para acceder a la misma y tenía el mismo problema y se utiliza -1 porque es Suppos e para recoger cualquier cámara web.

También probé para ver si Ubuntu reconoce la cámara web y lo hace. Estoy usando v4l2 para la cámara web.

{EDIT}

estoy usando el siguiente código para mostrar una señal de video, parece estar mostrando solamente una sola imagen de la cámara web capturado en lugar de un canal de 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

Me sale el mismo error, pero funciona bien. Obtengo una salida de imagen adecuada desde la cámara web. ¿Su cámara web funciona correctamente? ¿Obtienes la imagen correcta? – Froyo

+0

Lo mismo para mí. Pero como mencionó Froyo, funciona bien y obtiene imágenes adecuadas. ¿Lo entiendes? –

+0

Está bien, aparece en la ventana que creé ... Pero se ha producido un problema nuevo, consulte las ediciones que hice en la publicación original ... –

Respuesta

0

creo que usted necesita para poner

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

en un bucle para actualizar continuamente la imagen mostrada en la ventana. Es decir, el cuadro de cv.QueryFrame es una imagen estática, no un video continuo.

Si desea poder salir presionando una tecla, pruebe cv.WaitKey con un pequeño tiempo de espera en el circuito también.

+0

Gracias, en realidad lo descubrí después de buscar algunos ejemplos ... Realmente aprecio la respuesta. –

1

WOW, respondí mi propia pregunta en 15 después de publicar esto. Hice algunas investigaciones y la razón de la leva web sólo agarrar una imagen se debe a la ...

cv.WaitKey(-1) 

Esto no permite que el contenido de la ventana para refrescar. Configuré el número en 10 ...

cv.WaitKey(10) 

y funcionó a la perfección. También probé 100, pero no vi ninguna diferencia. Solo vi una diferencia cuando el número era 1000. Utilizo 1 porque parece que funciona con la mayor suavidad.

Aquí está el código completo para visualizar una entrada de cámara web

import cv 

cv.NamedWindow("webcam", 1) 

cam = cv.CaptureFromCAM(-1) 

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

¿Puede ser que necesite las 2 líneas debajo del bloque while sangrado? cv.WaitKey espera a que presione una tecla – luismesas

+0

Esto no parece corregir la impresión de 'VIDIOC_QUERYMENU: argumento inválido'. ¿Lo arreglaste al final? – elaRosca

0

Para mí, el comando de raíz

xhost +

guardar mi tiempo, la Nota para cerrar y abrir nueva terminal .

Nos vemos.

Cuestiones relacionadas