OpenCV Fehler bei findContours / Alternative?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
asdman3000
User
Beiträge: 17
Registriert: Donnerstag 1. April 2010, 15:05

Hi,

ich wusste nicht in welchen Bereich mit OpenCV-Fragen, deshalb jetzt mal hier:

Ich benutze Python 2.6 und OpenCV um mit einer Webcam rote Gegenstände zu filtern und möchte dann die Position eines solchen Gegenstandes finden. Mein Code soweit (größtenteils aus dem Inet zusammenkopiert):

Code: Alles auswählen

from opencv import *
from ctypes import *
from opencv import cv
from opencv import highgui

highgui.cvNamedWindow("MyWindow", 1)
highgui.cvNamedWindow("Filtered Stream", 1)
capture = highgui.cvCreateCameraCapture(0)


while 1:
  # Grab the current frame from the camera
  frame = highgui.cvQueryFrame(capture)
  # Show the current image in MyWindow
  highgui.cvShowImage("MyWindow", frame)
  
  # Create a 8-bit 1-channel image with same size as the frame
  color_mask = cv.cvCreateImage((640,480), 8, 1)

  # Specify the minimum / maximum colors to look for:
  max_color = (88,88,255)#(255, 88, 88)
  min_color = (0,0,160)#(160, 0, 0)


  # Find the pixels within the color-range, and put the output in the color_mask
  cv.cvInRangeS(frame, cv.cvScalar(*min_color), cv.cvScalar(*max_color), color_mask)
  
  
  highgui.cvShowImage("Filtered Stream", color_mask)
  # Wait a bit and check any keys has been pressed
  key = highgui.cvWaitKey(10)
  
# --------- FILTERING ---------- #
  # Next, split the mask into seperated - connected parts, by finding the contour:
  storage = cv.cvCreateMemStorage(0)
  c_count, contours = cv.cvFindContours(color_mask, storage, cv.CV_RETR_LIST, cv.CV_CHAIN_APPROX_SIMPLE) 
  # Go trough each contour
  for contour in contours.hrange():
  # Do some filtering
  # .....
Das Problem: bei der Funktion findContours (Zeile 37) kommt ein Fehler:
Bild
Ich habs schon mit anderen Argumenten in der Klammer versucht, bekomm aber immer den Fehler. Das Gleiche passiert auch bei dem Contours-Beispiel, das bei OpenCV dabei ist. Internet-Recherche ergab, dass die Funktion findContours bei vielen nicht richtig funktioniert. Deshalb möchte ich wissen, ob man den Fehler irgendwie beheben kann, oder was ich alternativ zu findContours benutzen könnte.

Vielen Dank im Voraus,
asdman3000
Zuletzt geändert von asdman3000 am Donnerstag 29. April 2010, 14:56, insgesamt 1-mal geändert.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Deine Importe sind auf jeden Fall kaputt. Erst *-Import und dann ein Untermodul importieren ist keine schlechte Idee, man kann sich dadurch "seltsame" Probleme einhandeln. Deshalb besser auf *-Importe verzichten und den Namen des Moduls vor die entsprechende Methode setzen. Wenn der zu lang ist, besser import thislongmodulename as short benutzen.
Inhaltlich kann ich die leider nicht weiterhelfen. :(
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ach, das ist *keine* schlechte Idee sagst du? :)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Ja, wenn man auf "seltsame", schwer nachvollziehbare Fehler steht. :oops: :twisted: 8)
Antworten