3D-Webcam

Aus Belug Wiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

3D Webcam

Hier entsteht die Wikiseite zum "3D-Webcam" Projekt.

Benötigt

Um die hier beschrieben Bildverarbeitung nachbauen zu können benötigt man:

  • 2 identische Webcams
  • PC
  • Python
  • OpenCV-python bindings

Thoerie

Anaglyph

Zur Berechnung eines 3D Anaglyph-Bildes wird der Rot Kanal aus einer Kamera mit dem Cyan Bild der anderen Kamera zu einem Bild zusammen gefügt.

Programme

Hier das Pythonprogramm für Anaglyphe 3D Bilder:

 
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import cv
 
# variables
WIDTH  = 640
HEIGHT = 480
 
lcam = cv.CaptureFromCAM(0)
rcam = cv.CaptureFromCAM(1)
 
# WebCam eigenschaften setzen
cv.SetCaptureProperty(lcam, cv.CV_CAP_PROP_FRAME_WIDTH, WIDTH)
cv.SetCaptureProperty(rcam, cv.CV_CAP_PROP_FRAME_WIDTH, WIDTH)
 
cv.SetCaptureProperty(lcam, cv.CV_CAP_PROP_FRAME_HEIGHT, HEIGHT)
cv.SetCaptureProperty(rcam, cv.CV_CAP_PROP_FRAME_HEIGHT, HEIGHT)
 
taste = 0
 
# 8 bit 3 Kanal Rottransformatrionsmatrix
rmat  = cv.CreateMat(HEIGHT, WIDTH, cv.CV_8UC3) 
 
for i in range(HEIGHT):
    for k in range(WIDTH):
        # rmat[i, k] = (0, 0, 1) # Full color red cyan
        rmat[i, k] = (0.114, 0.299, 0.587) # Half Color Red-Cyan
 
# 8 bit 3 Kanal Grün-Blau Transformationsmatrix 
gbmat  = cv.CreateMat(HEIGHT, WIDTH, cv.CV_8UC3) 
 
for i in range(HEIGHT):
    for k in range(WIDTH):
        gbmat[i, k] = (1, 1, 0)
 
# Outputmatrix
omat  = cv.CreateMat(HEIGHT, WIDTH, cv.CV_8UC3) 
 
for i in range(HEIGHT):
    for k in range(WIDTH):
        omat[i, k] = (0, 0, 0)
 
# main loop
while taste <> ord("q"):
    # Solange nicht die Taste "q" gedrueckt wurde Bilder
    # erneuern
 
    lbild = cv.QueryFrame(lcam) # linkes Bild einlesen   
    rbild = cv.QueryFrame(rcam) # rechtes Bild einlesen
 
    matl  = cv.GetMat(lbild) # in Matrix überführen
    matr  = cv.GetMat(rbild)
 
    ### Rotkanal aus rechter Kamera auslesen
    #print(rmat, matr)
    cv.Mul(rmat, matr, matr)
 
    ### grün blau aus linker Kamera
    cv.Mul(gbmat, matl, matl)
 
    ### Bilder zusammenfügen
    cv.Add(matl, matr, omat)
 
 
    cv.ShowImage("3D", omat)
    taste = cv.WaitKey(2)

Spezielles

Zukunft

Für die Zukunft stehen noch folgende Dinge auf der TODO-Liste:

  • Umsetzung in C für bessere Performance
  • Videoaufnahme/Photo Funktionalität
  • Parallelisierung der Matrizenoperationen
  • besseres Interface
  • < Dein Vorschlag hier... >


Ähnliche Seiten und Projekte

Stereofy 3D Bilder mit dem N900 schießen.

Persönliche Werkzeuge