2013-10-18 24 views
6

Ich versuche, Bilder von meiner Webcam mit einem Python-Code zu erwerben, der OpenCV importiert. Der Code ist der folgende:Python OpenCV Access Webcam maximale Auflösung

import sys 
sys.path.append("C:\\opencv\\build\\python\\2.7") 
import cv2 
import cv2.cv as cv 
import time 

# Set resolution 
cap = cv2.VideoCapture(0) 
print "Frame default resolution: (" + str(cap.get(cv.CV_CAP_PROP_FRAME_WIDTH)) + "; " + str(cap.get(cv.CV_CAP_PROP_FRAME_HEIGHT)) + ")" 
cap.set(cv.CV_CAP_PROP_FRAME_WIDTH, 800) 
cap.set(cv.CV_CAP_PROP_FRAME_HEIGHT, 600) 
print "Frame resolution set to: (" + str(cap.get(cv.CV_CAP_PROP_FRAME_WIDTH)) + "; " + str(cap.get(cv.CV_CAP_PROP_FRAME_HEIGHT)) + ")" 

# Acquire frame 
capture = cv.CreateCameraCapture(0) 
img = cv.QueryFrame(capture) 

Der Code funktioniert gut, außer dass die Kamera Standardauflösung 640x480, und mein Code scheint in der Lage zu sein, nur Auflösung, um Werte niedriger. Zum Beispiel kann ich die Bildgröße auf 320x240 einstellen, aber ich kann es nicht auf 800x600 ändern. Ich habe keinen Fehler angezeigt: einfach die Auflösung wird auf den Standardwert (640x480) gesetzt, während ich versuche, höhere Werte einzustellen. Die Kamera, die ich benutze (keine andere Webcam ist an den Computer angeschlossen), ist die QuickCam V-UBK45: Mit der Software von Logitech kann ich Bilder mit voller Auflösung (1280x960) und allen dazwischen liegenden Bildern aufnehmen (zB 800x600).

Daher werden diese Frame-Größen von der Hardware unterstützt, aber mein Code kann nicht darauf zugreifen.

Weiß jemand was ich tun kann?

+1

erfasst die Kamera * Video * bei 640x480 in anderen Anwendungen? – goncalopp

+0

was @goncalopp sagte, ließ mich denken, dass sie die Auflösung für * Videostreams * (Bandbreite) im Treiber einschränken könnten, während ihre Anwendung immer noch * einzelne * Bilder bei höheren Werten aufnehmen kann. – berak

+0

Kennen Sie den Code dafür in cv2, wie in cv und cv2 nicht mischen. Irgendwelche Ideen? –

Antwort

0

Ich habe das gleiche Problem wie Sie, dass ich eine höhere Auflösung in opencv verschiedene "Anwendung" nicht bekommen kann. Aber mit der Logitech Software kann ich Videos in 720p (Kamera C270) aufnehmen. Nach einigen Tagen der Recherche kam ich zur selben Erklärung wie @break, dass sie die Auflösung im Treiber einschränkten. Ich gab es auf und wird eine andere, nicht Logitech, ein ...

6

ich verwendet, um die verschiedenen Auflösungen kaufen einstellen Bildauflösung von List of common resolutions durch Schleifen über

def set_res(cap, x,y): 
    cap.set(cv.CV_CAP_PROP_FRAME_WIDTH, int(x)) 
    cap.set(cv.CV_CAP_PROP_FRAME_HEIGHT, int(y)) 
    return str(cap.get(cv.CV_CAP_PROP_FRAME_WIDTH)),str(cap.get(cv.CV_CAP_PROP_FRAME_HEIGHT)) 

und this ist das, was ich habe.

Es scheint, dass CV oder meine Kamera nur bestimmte Auflösungen erlaubt.

  • 160,0 x 120,0

  • 176,0 x 144,0

  • 320,0 x 240,0

  • 352,0 x 288,0

  • 640,0 x 480,0

  • 1024,0 x 768,0

  • 1280,0 x 1024,0

3

Ich habe es, zu arbeiten, damit diese Stelle ist für andere das gleiche Problem auftreten:

ich auch auf der Logitech C270 leite. Aus irgendeinem Grund würde es nur 640x480 zeigen, obwohl die Webcam 1280x720 unterstützt. Das gleiche Problem besteht weiterhin bei der eingebauten Webcam in meinem Laptop.

Wenn ich es im Code auf 800x600 einstellen, zeigt es 640x480. Wenn ich es jedoch auf 1024 x 768 einstelle, wird es 800 x 600. Und wenn ich es auf etwas albernes wie 2000x2000 setze, wird es 1280x720.

Dies ist in C++ auf OpenCV 3.0, aber vielleicht gilt es auch für Python.

+0

Das ist richtig, es gibt '(7680, 4320)' '' '(1280.0, 720.0)' für mich, das ist die maximale Auflösung meiner Kamera. – Rockybilly

0

Für cv2 einfach zu diesem ändern.

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800) 
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)