2012-07-05 18 views
5

Używam poniższy kod, żeby uzyskać dostęp do mojej kamery internetowej za pomocą OpenCV + Pythona ...Problemy z korzystaniem z kamery w python + OpenCV

import cv 

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

cam = cv.CaptureFromCAM(-1) 

ja potem otrzymuję następujący błąd w konsoli ...

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

i został pierwotnie używając,

cv.CaptureFromCAM(0) 

dostęp do tego samego i miał ten sam problem i używane -1 ponieważ jest suppos e, aby odebrać kamerę internetową.

Sprawdziłem również, czy Ubuntu rozpoznaje kamerę internetową i tak jest. Używam v4l2 do kamery internetowej.

{EDIT}

Używam następujący kod do wyświetlania strumienia wideo, wydaje się być tylko pokazano tylko jeden obraz kamery internetowej przechwycone zamiast ciągłego materiału wideo ...

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

Otrzymuję ten sam błąd, ale działa dobrze. Dostaję prawidłowy obraz z kamery internetowej. Czy twoja kamera działa poprawnie? Czy masz odpowiedni obraz? – Froyo

+0

To samo dla mnie. Ale jak wspomniał Froyo, działa dobrze i otrzymuje odpowiednie obrazy. Rozumiesz? –

+0

OK, pojawia się w oknie, które utworzyłem ... Ale pojawił się nowy problem, zapoznaj się ze zmianami wprowadzonymi w pierwotnym wpisie ... –

Odpowiedz

0

wierzę trzeba umieścić

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

w pętli stale aktualizować obraz wyświetlany w oknie. Oznacza to, że ramka z cv.QueryFrame jest statycznym obrazem, a nie ciągłym wideo.

Jeśli chcesz wyjść z naciśnięcia klawisza, przetestuj cv.WaitKey z małym czasem oczekiwania w pętli.

+0

Dziękuję, po prostu wymyśliłem to po przejrzeniu kilku przykładów ... Naprawdę doceniam odpowiedź. –

1

WOW, odpowiedziałem na moje własne pytanie w 15 po tym, jak to opublikowałem. Zrobiłem rozeznanie i powodem kamery internetowej chwytając tylko jeden obraz jest ze względu na ...

cv.WaitKey(-1) 

To nie pozwala zawartość okna, aby odświeżyć. Ustawiłem na 10 ...

cv.WaitKey(10) 

i działało pięknie. Próbowałem też 100, ale nie widziałem różnicy. Widziałem tylko różnicę, gdy liczba wynosiła 1000. Używam 1, ponieważ wydaje się, że działa płynnie.

Oto pełny kod służący do wyświetlania kanału kamery internetowej

import cv 

cv.NamedWindow("webcam", 1) 

cam = cv.CaptureFromCAM(-1) 

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

Czy może być konieczne, aby dwie linie były poniżej wcięcia bloku? cv.WaitKey czeka na naciśnięcie klawisza – luismesas

+0

Nie wydaje się, aby naprawić drukowanie "VIDIOC_QUERYMENU: Invalid argument'. Naprawiłeś to w końcu? – elaRosca

0

Dla mnie polecenie root

xhost +

zaoszczędzić swój czas, uwagę, aby zamknąć i otworzyć nowy terminal .

Do zobaczenia.

Powiązane problemy