Seite 1 von 1

OpenCV Fehler bei findContours / Alternative?

Verfasst: Mittwoch 28. April 2010, 18:02
von asdman3000
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

Verfasst: Donnerstag 29. April 2010, 10:11
von mkesper
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. :(

Verfasst: Donnerstag 29. April 2010, 17:48
von derdon
Ach, das ist *keine* schlechte Idee sagst du? :)

Verfasst: Freitag 30. April 2010, 10:19
von mkesper
Ja, wenn man auf "seltsame", schwer nachvollziehbare Fehler steht. :oops: :twisted: 8)