Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws1314:gruppe_2

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ws1314:gruppe_2 [2014/02/06 14:24]
p.kugelstadt
ws1314:gruppe_2 [2016/05/10 14:46] (aktuell)
Zeile 1: Zeile 1:
 Bild von der Kamera einlesen: Bild von der Kamera einlesen:
-<​code>​capture= cv2.VideoCapture(0)  ​+<​code ​python>​capture= cv2.VideoCapture(0)  ​
 res,​bild=capture.read() res,​bild=capture.read()
 </​code>​ </​code>​
 Bild in grau umwandeln: Bild in grau umwandeln:
-<​code>​bild_grau=cv2.cvtColor(bild,​cv2.cv.CV_BGR2GRAY)+<​code ​python>​bild_grau=cv2.cvtColor(bild,​cv2.cv.CV_BGR2GRAY)
 </​code>​ </​code>​
 Kopie eines Bildes erstellen: Kopie eines Bildes erstellen:
-<​code>​bild_kopie=bild.copy()+<​code ​python>​bild_kopie=bild.copy()
 </​code>​ </​code>​
 Bildgröße anzeigen (Zeilen, Spalten, (Anzahl der Farbkanäle)):​ Bildgröße anzeigen (Zeilen, Spalten, (Anzahl der Farbkanäle)):​
-<​code>​print "Shape ", bild.shape+<​code ​python>print "Shape ", bild.shape
 </​code>​ </​code>​
 Definieren der Zeilen und Spalten (Anzahl der Variablen muss gleich sein): Definieren der Zeilen und Spalten (Anzahl der Variablen muss gleich sein):
-<​code>​zeilen,​ spalten=bild.shape+<​code ​python>zeilen, spalten=bild.shape
 </​code>​ </​code>​
 Wenn man einen Punkt im array verändert, verändert man seine Farbe: Wenn man einen Punkt im array verändert, verändert man seine Farbe:
-<​code>​bild[j,​i] = (255 , 255 , 255) --> "Schwarz" </​code>​+<​code ​python>​bild[j,​i] = (255 , 255 , 255) --> "Weiß" </​code>​
 j entspricht der Zeile, i der Spalte. j entspricht der Zeile, i der Spalte.
  
  
 Faltung (abstrakt): Faltung (abstrakt):
-<​code>​bild=sig.convolve2d(A,​ B, Parameter)/​255. </​code>​+<​code ​python>​bild=sig.convolve2d(A,​ B, Parameter)/​255. </​code>​
 (-> /255,da Grauwerte mit einem Wert nicht zwischen 255 und 0 sondern zwischen 0 und 1 gespeichert werden, "​."​ damit es als double interpretiert wird(muss so sein)) (-> /255,da Grauwerte mit einem Wert nicht zwischen 255 und 0 sondern zwischen 0 und 1 gespeichert werden, "​."​ damit es als double interpretiert wird(muss so sein))
 Dafür muss man scipy.signal importieren,​ z.B als sig (s. oben) Dafür muss man scipy.signal importieren,​ z.B als sig (s. oben)
Zeile 31: Zeile 31:
       * "​fillvalue"​.       * "​fillvalue"​.
 speziell: "​Entrauschungs-faltung":​ speziell: "​Entrauschungs-faltung":​
-<​code>​bild_neu=sig.convolve2d(bild,​ 0.1*np.array([[1,​1,​1],​[1,​2,​1],​[1,​1,​1]]),​mode='​valid'​)/​255. </​code>​+<​code ​python>​bild_neu=sig.convolve2d(bild,​ 0.1*np.array([[1,​1,​1],​[1,​2,​1],​[1,​1,​1]]),​mode='​valid'​)/​255. </​code>​
 Beispiel für eine 5x5 entrauschungsmatrix:​ Beispiel für eine 5x5 entrauschungsmatrix:​
-<​code>​bild_neu=sig.convolve2d(bild,​ (1/​256.)*np.array([[1,​4,​6,​4,​1],​[4,​16,​24,​16,​4],​[6,​24,​36,​24,​6],​[4,​16,​24,​16,​4],​[1,​4,​6,​4,​1]])  ​+<​code ​python>​bild_neu=sig.convolve2d(bild,​ (1/​256.)*np.array([[1,​4,​6,​4,​1],​[4,​16,​24,​16,​4],​[6,​24,​36,​24,​6],​[4,​16,​24,​16,​4],​[1,​4,​6,​4,​1]])  ​
                                 ,​mode='​valid'​)/​255. </​code>​                                 ,​mode='​valid'​)/​255. </​code>​
                                 ​                                 ​
 Schwellenwert finden (Graubild -> Schwarz-Weiß-Bild) Schwellenwert finden (Graubild -> Schwarz-Weiß-Bild)
-<​code>​bild_schwarzweiss=bild_grau.copy()+<​code ​python>​bild_schwarzweiss=bild_grau.copy()
 zeilen, spalten=bild_schwarzweiss.shape zeilen, spalten=bild_schwarzweiss.shape
 for i in range(0,​zeilen):​ for i in range(0,​zeilen):​
Zeile 50: Zeile 50:
  
 Punkt suchen: Punkt suchen:
- gefunden = False +<code python>gefunden = False 
- for i in range(0,​spalten):​ +for i in range(0,​spalten):​ 
- for j in range(0,​zeilen):​ + for j in range(0,​zeilen):​ 
-  if(bild[i][j] == 1): +  if(bild[i][j] == 1): 
- breite = i + breite = i 
- laenge = j + laenge = j 
- gefunden = True + gefunden = True
- break +
- if gefunden:+
  break  break
 + if gefunden:
 + break
 +</​code>​
  
 breite entspricht der Spalte in der der Punkt gefunden wurde, länge der zeile, statt "​1"​ kann jeder andere Wert genommen werden. "​gefunden"​ stellt sicher, ob ein Punkt gefunden wurde. breite entspricht der Spalte in der der Punkt gefunden wurde, länge der zeile, statt "​1"​ kann jeder andere Wert genommen werden. "​gefunden"​ stellt sicher, ob ein Punkt gefunden wurde.
Zeile 67: Zeile 68:
  
 Konturensuche in eine bestimmte Richtung: Konturensuche in eine bestimmte Richtung:
- +<code python> 
- p = [breite,​laenge] +p = [breite,​laenge] 
- contour.append(p) +contour.append(p) 
- v = [1,0] +v = [1,0] 
- fertig = False +fertig = False 
- while (not fertig): +while (not fertig): 
- if(bild[(p[0]+v[0])] ​   [(p[1]+v[1])]):​ + if(bild[(p[0]+v[0])] ​   [(p[1]+v[1])]):​ 
- p1 = [(p[0]+v[0]),​(p[1]+v[1])] + p1 = [(p[0]+v[0]),​(p[1]+v[1])] 
- contour.append(p1) + contour.append(p1) 
- p = p1 + p = p1 
 +</​code>​ 
 +Es werden nur die Punkte ein Array eingetragen*seufz*
  
 Konturensuche in alle Richtungen: Konturensuche in alle Richtungen:
- gefunden = False +<code python>gefunden = False 
- for Richtung in range(0,​8):​ +if( bild_schwarzweiss[(p[0] + 1)][(p[1]+1)]):​ 
- if(Richtung == 0 and bild_schwarzweiss[(p[0] + 1)][(p[1]+1)]):​ + p1 = [(p[0] + 1)][(p[1]+1)] 
- p1 = [(p[0] + 1)][(p[1]+1)] + v  = [1][1] 
- v  = [1][1] + gefunden = True 
- gefunden = True + contour.append(p1) 
- contour.append(p1) + p = p1 
- p = p1 + break 
- break +if(bild[(p[0])] ​   [(p[1]+1)]):​ 
- if(Richtung == 1 and bild[(p[0])] ​   [(p[1]+1)]):​ + p1 = [(p[0])] ​   [(p[1]+1)] 
- p1 = [(p[0])] ​   [(p[1]+1)] + v = [0][1] 
- v = [0][1] + gefunden = True 
- gefunden = True + contour.append(p1) 
- contour.append(p1) + p = p1 
- p = p1 + break 
- break +if(bild[(p[0] - 1)][(p[1]+1)]):​ 
- if(Richtung == 2 and bild[(p[0] - 1)][(p[1]+1)]):​ + p1 = [(p[0] - 1)][(p[1]+1)] 
- p1 = [(p[0] - 1)][(p[1]+1)] + v = [-1][1] 
- v = [-1][1] + gefunden = True 
- gefunden = True + contour.append(p1) 
- contour.append(p1) + p = p1 
- p = p1 + break 
- break +if(bild[(p[0] + 1)][(p[1])]):​ 
- if(Richtung == 3 and bild[(p[0] + 1)][(p[1])]):​ + p1 = [(p[0] + 1)][(p[1])]  
- p1 = [(p[0] + 1)][(p[1])] + v = [1][0] 
- v = [1][0] + gefunden = True 
- gefunden = True + contour.append(p1) 
- contour.append(p1) + p = p1 
- p = p1 + break 
- break +if(Richtung == 4 and bild[(p[0] - 1)][(p[1])]):​ 
- if(Richtung == 4 and bild[(p[0] - 1)][(p[1])]):​ + p1 = [(p[0] - 1)][(p[1])] 
- p1 = [(p[0] - 1)][(p[1])] + v = [-1][0] 
- v = [-1][0] + gefunden = True 
- gefunden = True + contour.append(p1) 
- contour.append(p1) + p = p1 
- p = p1 + break 
- break +if(bild[(p[0] + 1)][(p[1] - 1)]): 
- if(Richtung == 5 and bild[(p[0] + 1)][(p[1] - 1)]): + p1 = [(p[0] + 1)][(p[1] - 1)] 
- p1 = [(p[0] + 1)][(p[1] - 1)] + v = [1][-1] 
- v = [1][-1] + gefunden = True 
- gefunden = True + contour.append(p1) 
- contour.append(p1) + p = p1 
- p = p1 + break 
- break +if(bild[(p[0])] ​   [(p[1]) - 1]): 
- if(Richtung == 6 and bild[(p[0])] ​   [(p[1]) - 1]): + p1 = [(p[0])] ​   [(p[1]) - 1] 
- p1 = [(p[0])] ​   [(p[1]) - 1] + v = [0][-1] 
- v = [0][-1] + gefunden = True 
- gefunden = True + contour.append(p1) 
- contour.append(p1) + p = p1 
- p = p1 + break 
- break +if(bild[(p[0]-1)] ​ [(p[1] - 1)]): 
- if(Richtung == 7 and bild[(p[0]-1)] ​ [(p[1] - 1)]): + p1 = [(p[0]-1)] ​ [(p[1] - 1)] 
- p1 = [(p[0]-1)] ​ [(p[1] - 1)] + v = [-1][-1] 
- v = [-1][-1] + gefunden = True 
- gefunden = True + contour.append(p1) 
- contour.append(p1) + p = p1 
- p = p1 + break 
- break +</​code>​
 Wieder wird durch "​gefunden"​ sichergestellt,​ dass etwas gefunden wurde. Jede Richtung wird untersucht, wird etwas gefunden, gibt es einen Abbruch. Wieder wird durch "​gefunden"​ sichergestellt,​ dass etwas gefunden wurde. Jede Richtung wird untersucht, wird etwas gefunden, gibt es einen Abbruch.
-Die Richtung in die gegangen wurde wird unter der Variable "​v"​ gespeichert. Der neue Punkt ist "​p1",​ der alte Punkt heisst "​p"​. Am Ende wird "​p"​ verändert, damit die Prozedur von neuem  beginnen kann. +die Richtung in die gegangen wurde wird unter der Variable "​v"​ gespeichert. Der neue Punkt ist "​p1",​ der alte Punkt heisst "​p"​. Am Ende wird "​p"​ verändert, damit die Prozedur von neuem  beginnen kann.
- +
- +
  
 +Hier eine kleine Vereinfachung:​
 +<code python>​def Nebenstellen(bild ,v ,p ):
 + gefunden = False
 + if(bild[(p[0] + v[0])] ​  ​[(p[1]+v[1])]):​
 + p1 = [(p[0] + v[0]),​(p[1]+v[1])]
 + gefunden = True
 + p = p1
 + if gefunden:
 + return p, v, gefunden
 + return False
 +if Nebenstellen(bild ,[1,1] ,p ):
 + p, v, gefunden = Nebenstellen(bild ,[1,1] ,p )
 + contour.append(p)
 +if Nebenstellen(bild ,[0,1] ,p ):
 + p, v, gefunden = Nebenstellen(bild ,[1,1] ,p )
 + contour.append(p)
 +if Nebenstellen(bild ,[-1,1] ,p ):
 + p, v, gefunden = Nebenstellen(bild ,[1,1] ,p )
 + contour.append(p)
 +if Nebenstellen(bild ,[1,0] ,p ):
 + p, v, gefunden = Nebenstellen(bild ,[1,1] ,p )
 + contour.append(p)
 +if Nebenstellen(bild ,[0,0] ,p ):
 + p, v, gefunden = Nebenstellen(bild ,[1,1] ,p )
 + contour.append(p)
 +if Nebenstellen(bild ,[-1,0] ,p ):
 + p, v, gefunden = Nebenstellen(bild ,[1,1] ,p )
 + contour.append(p)
 +if Nebenstellen(bild ,[1,-1] ,p ):
 + p, v, gefunden = Nebenstellen(bild ,[1,1] ,p )
 + contour.append(p)
 +if Nebenstellen(bild ,[0,-1] ,p ):
 + p, v, gefunden = Nebenstellen(bild ,[1,1] ,p )
 + contour.append(p)
 +if Nebenstellen(bild ,[-1,-1] ,p ):
 + p, v, gefunden = Nebenstellen(bild ,[1,1] ,p )
 + contour.append(p)
 +</​code>​
ws1314/gruppe_2.1391693089.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)