Archiv für Oktober, 2011

„The Imaging Source“-Kamera mit Python auslesen

27. Oktober 2011 von edgar

Vermutlich funktionieren viele USB-Webcams unter Windows ganz einfach auch in Python mit Hilfe von OpenCV, wie zum Beispiel in diesem Artikel beschrieben.

Leider ließ sich meine Kamera, eine DMx 41AU02.AS von „The Imaging Source“ (TIS) nicht damit ansprechen. Trotz korrekter Installation aller Module (OpenCV, NumPy, SciPy) lieferte das Capture kein Bild zurück.

Lösen konnte ich das Problem mit einem weiteren Modul für Python: VideoCapture. Dieses Modul benötigt zusätzlich die Python Imaging Library (PIL). Hat man beides installiert, kann man folgendermaßen ein Bild auslesen und in eine Datei schreiben:
from VideoCapture import Device
cam = Device()
cam.saveSnapshot('image.jpg')

Quelle: http://videocapture.sourceforge.net/

Um das Bild nicht direkt abzuspeichern, sondern für die interne Verarbeitung zu capturen, benötigt man folgenden Befehl:
pil_img = cam.getImage()

Möchte man zusätzlich das Bild mit OpenCV weiterverarbeiten (zum Beispiel in einem Fenster anzeigen), dann muss man es zunächst konvertieren:

import cv
import PIL

cv_img = cv.CreateImageHeader(pil_img.size, cv.IPL_DEPTH_8U, 3) # RGB image
cv.SetData(cv_img, pil_img.tostring(), pil_img.size[0]*3

Quelle: http://stackoverflow.com/questions/1650568/how-do-i-create-an-opencv-image-from-a-pil-image

Zum Schluss habe ich noch ein komplettes Beispielprogramm, welches immer wieder ein Bild von der Kamera ausliest und in einem Fenster anzeigt, beenden kann man es mit „Esc“.
from VideoCapture import Device
import cv
import PIL

cam = Device()

cv.namedWindow("camera", 1)

#cam.displayCapturePinProperties() # Zum Einrichten der Kamera

while True:
    pil_img = cam.getImage()
    cv_img = cv.CreateImageHeader(pil_img.size, cv.IPL_DEPTH_8U, 3)
    cv.SetData(cv_img, pil_img.tostring(), pil_img.size[0]*3)
    cv.ShowImage("camera", cv_img)

    if cv.WaitKey(10) == 27:    # Achtung: ganz ohne WaitKey
        break                   # funktioniert namedWindow nicht!
cv.DestroyWindow("camera")

Der Vollständigkeit halber — folgende Programmversionen benutze ich dafür: Python 2.7, OpenCV 2.2, PIL 1.1.7, VideoCapture 0.9-4, NumPy 1.6.1, SciPy 0.9.0



css.php