Unvorhergesehener Programmabsturz
Verfasst: Donnerstag 12. April 2007, 15:17
Hallo Leute. Ich habe gerade angefangen mich mit Videofiltern in Python zu beschäftigen. Zu dem Zweck habe ich ein kleines Programm zusammengesetzt das Bilder von einer Webcam captured, Pixel für Pixel Anhand einer bestimten Regel durchsucht und dann die den kriterien entsprechenden Pixel ersetzt. Funktioniert auch alles ganz wunderbar, nur crasht mir das Programm nach einer gewissen Laufzeit immer wieder. Mir ist auch aufgefallen das das Programm eine wachsende Menge an Speicher konsumiert und ich konnte nicht entdecken wo in meinem Code dies geschieht. Vielleicht habe ich ja heute auch einfach nur ein Brett vor dem Kopf, wäre dankbar wenn mal jemand schauen könnte ob ich nicht etwas wichtiges übersehen habe. Im voraus schonmal vielen Dank.
Das ganze läuft übrigens auf einem Rechner unter Windows XP unter Zuhilfenahme von "VideoCapture" : http://videocapture.sourceforge.net/
"PIL" und "PyGame".
Hier der Programmcode:
Das ganze läuft übrigens auf einem Rechner unter Windows XP unter Zuhilfenahme von "VideoCapture" : http://videocapture.sourceforge.net/
"PIL" und "PyGame".
Hier der Programmcode:
Code: Alles auswählen
from VideoCapture import Device
import pygame
import random
replacementcolor = (0, 255, 0)
pixelMem = []
counter = 0
black = (0, 0, 0)
#init Capture Device
cam = Device()
#init Display
size = width, height = 640, 400
screen = pygame.display.set_mode(size)
#------------------------------------------------------------#
#mainloop
while True:
img = cam.getImage()
primList = list(img.getdata())
#Filtern der gesuchten Pixel
for i in primList:
if i[0]>200: #Filterregel
pixelMem.append(counter)
counter += 1
counter = 0
#Ersetzen der Pixel
for pixelNr in pixelMem:
primList[pixelNr] = replacementcolor
#Rieckschreiben des Pixelsequenz in das img
img.putdata(primList)
#img fuer Pygame ladbar machen ; PIL image --> string
mode = img.mode
size = img.size
data = img.tostring()
#laden des bildes vom string
display_pic = pygame.image.fromstring(data, size, mode)
display_pic_rect = display_pic.get_rect()
#Bild zeichnen und sichtbar machen
screen.fill(black)
screen.blit(display_pic, display_pic_rect)
pygame.display.flip()