„The Imaging Source“-Kamera mit Python auslesen
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
Philip Chimento
Vielen Dank!
Nov 2nd, 2011 11.59
else
Hier eine Anpassung für das cv2 Python-Interface von OpenCV (alles nur zusammenkopiert, keine Garantie, es mag eleganter gehen):
Python 2.7.3, OpenCV 2.4.4, Numpy 1.7.0, VideoCapture 0.9-5, PIL 1.1.7
cv_img = cv2.cv.CreateImageHeader(pil_img.size, cv2.cv.IPL_DEPTH_8U, 3) # RGB image
cv2.cv.SetData(cv_img, pil_img.tostring(), pil_img.size[0]*3)
cv2_img = numpy.asarray(cv_img[:,:])
Mrz 22nd, 2013 15.59
else
Wenn es nicht klappt mit dem Auslesen sind evtl. die Kamera-Einstellungen inkompatibel, also einfach mit IC Capture o.Ä. öffnen und dann nochmal probieren.
Viel Erfolg.
Aug 19th, 2013 15.09