2012-06-13 25 views
8

Quiero conseguir el flujo de vídeo de mi cámara web con Python y OpenCV, para esa tarea he implementado este código simple:Webcam y OpenCV - pitón

import cv 

cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE) 
capture = cv.CaptureFromCAM(0) 

def repeat(): 
    frame = cv.QueryFrame(capture) 
    cv.ShowImage("w1", frame) 


while True: 
    repeat() 

cuando intento ejecutarlo, i el siguiente error:

[email protected]:~/Python$ python camera.py 
VIDIOC_QUERYMENU: Argumento inválido 
VIDIOC_QUERYMENU: Argumento inválido 
VIDIOC_QUERYMENU: Argumento inválido 

me cambió la siguiente línea de lo sugerido por otros mensajes:

capture = cv.CaptureFromCAM(0) 

a:

capture = cv.CaptureFromCAM(-1) 

pero el error persiste.

+0

WAITKEY es una parte importante de OpenCV. muchas personas sienten que no necesitan esperar una pulsación de tecla y omitirla, pero la GUI no se ejecutará sin ella y su ventana nunca aparecerá. – Octopus

Respuesta

21

Tiene que agregar la función waitkey al final.

Por debajo del código funciona bien para mí.

import cv 
cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE) 
capture = cv.CaptureFromCAM(0) 

def repeat(): 
    frame = cv.QueryFrame(capture) 
    cv.ShowImage("w1", frame) 

while True: 
    repeat() 
    if cv.WaitKey(33)==27: 
     break 

cv.DestroyAllWindows() 

Y si usted no es consciente, OpenCV usos actuales nueva API Python cv2 y tiene un montón de características. En ese, mismo código se escribe como:

import cv2 
import numpy as np 
c = cv2.VideoCapture(0) 

while(1): 
    _,f = c.read() 
    cv2.imshow('e2',f) 
    if cv2.waitKey(5)==27: 
     break 
cv2.destroyAllWindows() 
+0

Este código no funciona para mí. Estoy usando Python 2.7. Todavía obtengo el error con el argumento Inválido. – elaRosca

+0

¿qué línea muestra el error? –

+0

Esto tampoco parece funcionar para mí, tal vez opencv ha cambiado, tal vez Python. dir (cv) muestra que el método es namedWindow() no NamedWindow(), y VideoCapture no parece ser un método en ninguna parte. – Mittenchops

1

A continuación código funciona para Python 2.7 y OpenCV que tiene construir para el pitón 2,7

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 

if not(cap.isOpened()): 
    cap.open() 

while(cap.isOpened()): 
    ret, frame = cap.read() 
    cv2.imshow('frame',frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

cap.release() 
cv2.destroyAllWindows()