Kontur finden - wie? [GELÖST]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

BadDeath

Betreff: Kontur finden - wie? [GELÖST]

BeitragDi, Jul 15, 2008 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
So, für mein aktuelle Projekt muss ich die Kontur eines Bildes rausschneiden, theoretisch weiß ich ja auch wie, da der hintergrund bereits einfargbig mit RGB(255,0,255) gefärbt wurde.

nun versuche ich es mit folgendem code:

Code: [AUSKLAPPEN]
For i=1 To Counter
   Bild = LoadImage(Projekt+"\Step 2 - " + Int(i) + ".bmp")
   SetBuffer ImageBuffer(Bild)
   LockBuffer ImageBuffer(Bild)
   For x = 1 To ImageWidth(Bild) - 1
      Fremd = 1
      For y = 1 To ImageHeight(Bild) - 1
         
         RGB2 = ReadPixelFast(x, y, ImageBuffer(Bild))
         rr = (RGB2 And $FF0000) / $10000
         gg = (RGB2 And $FF00) / $100
         bb = RGB2 And $FF
         
         
         If rr <> 255 And gg <> 0 And bb <> 255 Then
            If Fremd Then WritePixelFast x,y,RGB(255,0,255)
            Fremd = 1
         Else
            If Fremd Then WritePixelFast x,y,RGB(255,0,255)
            Fremd = 0
         End If
      Next
   Next
   
   AppTitle "Zu " + Str(i/Counter*100) + "% fertig"
   UnlockBuffer
   SaveBuffer (ImageBuffer(Bild),Projekt+"\Step 3 - " + Int(i) + ".bmp")
Next


wenn ich nun dieses bild nehme:
https://www.blitzforum.de/upload/file.php?id=3158

kommt dieses bild raus:
https://www.blitzforum.de/upload/file.php?id=3159

also bemerkt er nicht, dass der hintergrund wieder anfängt. Kann mir bitte jemand helfen?

DANKE!!

~Editiert~
Keine BMP-Bilder direkt einbinden! Eigentlich sollte man ohnehin niemals BMP im Internet benutzen. Durch Links ersetzt. MfG D2006
  • Zuletzt bearbeitet von BadDeath am Mi, Jul 16, 2008 1:06, insgesamt einmal bearbeitet
 

Marek

BeitragDi, Jul 15, 2008 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Vorneweg, ich hab den Code nicht durchgelesen! Den Bildern nach zu urteilen, könntest du versuchen das ganze mit Winkeln zu machen. Dein Programm arbeitet momentan ja von oben nach unten, so wies aussieht und findet dabei die Kante. Das ist der Fall bei 0°. Bei 180° musst du das Prog nur so umschreiben das es von unten nach oben läuft. 90° und 270° sind dann von links nach rechts und von rechts nach links. dann musst du die Bilder nur noch übereinanderlegen. Am besten bei den Bildern bei 90° 180° und 270° das rosa durchsichtig machen und dann auf das Bild bei 0° zeichnen. Sollte dann schon besser aussehen, wenn auch nicht perfekt Smile Leider dauert es aber auch 4x länger...

MfG Marek
Wer lesen kann ist klar im Vorteil...
 

BadDeath

BeitragDi, Jul 15, 2008 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
mhh, eigentlich sollte es ja auch so gehen, rein vom logischen her...aber ich werde es nachher mal testen

danke schonmal

---------------- [EDIT] ----------------

Gut, es geht nun:
Code: [AUSKLAPPEN]
For i=1 To Counter
   Bild = LoadImage(Projekt+"\Step 2 - " + Int(i) + ".bmp")
   SetBuffer ImageBuffer(Bild)
   LockBuffer ImageBuffer(Bild)
   For x = 1 To ImageWidth(Bild) - 1
      Fremd = 0
      For y = 1 To ImageHeight(Bild)
         
         RGB2 = ReadPixelFast(x, y, ImageBuffer(Bild))
         r = (RGB2 And $FF0000) / $10000
         g = (RGB2 And $FF00) / $100
         b = RGB2 And $FF
         
         If r = 255 And g = 0 And b = 255 Then
            If Fremd Then WritePixelFast x,y,RGB(255,255,255)
            Fremd = 0
         Else
            If Fremd = 1 Then
               WritePixelFast x,y,RGB(255,0,255)
               Fremd = 1
            End If   
            
            If Fremd = 0 Then
               Fremd = 1
               WritePixelFast x,y,RGB(255,255,255)
            End If
         End If
      Next
   Next
   
   AppTitle "Zu " + Str(i/Counter*100) + "% fertig"
   UnlockBuffer
   SaveBuffer (ImageBuffer(Bild),Projekt+"\Step 3 - " + Int(i) + ".bmp")
Next


Irgendwie stand ich vorher auf dem Schlauch ^^


PS: das Ergebnis nun, zwar noch nicht ganz perfekt, aber werde ich schon schaffen:

https://www.blitzforum.de/upload/file.php?id=3161

~Editiert~
Keine BMP-Bilder direkt einbinden! Eigentlich sollte man ohnehin niemals BMP im Internet benutzen. Durch Links ersetzt. MfG D2006
-~= real coders just code in binary =~-

ToeB

BeitragMi, Jul 16, 2008 12:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Was meinst du mit Konturen ? Sowas wie Umriss ? Weil ich hab da mal ne Function zu geschrieben... Musse mal im Codearchiv gucken Wink


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

BadDeath

BeitragMi, Jul 16, 2008 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe ich ich gefunden ^^

Super Code, läuft besser als meiner, bei dir gibt es ne durchgezogene Linie. Habe meinen mal gleich durch deinen Ersetzt. Very Happy

Danke!

Nun stehe ich vor einem weiterem Problem, welches eigentlich keins für Anfänger ist, wollte aber keinen neuen Thread auf machen.

Undzwar setze ich dann für jeden weißen Pixel einen Würfel in den Raum und das mit mehreren Bildern, die eine "Scheibe" darstellen. Am Ende habe ich dann ein Objekt aus vielen Würfeln. Ziel soll es sein um die Würfel eine Hülle drum zubauen und diese dann als 3ds, b3d o.ä. zu speichern.

Doch ich scheitere schon bei der Hülle.... Nach stundenlangem Suchen fand ich diese tolle DLL: qHull

Nun versuche ich die Hülle so zubauen:
Code: [AUSKLAPPEN]

Mesh = CreateMesh()

for .. ;jeden weißen Pixel
   Local C.Cube = New Cube
   C\Mesh = CreateCube()
   AddMesh C\Mesh, Mesh 
   PositionEntity C\Mesh,x,i*2,y
   ScaleEntity C\Mesh,1,2,1
next

; Hauptschleife
If KeyHit(2) Then
   r=make_hull(mesh, "in.txt", "out.off",  0.00, 1)
   EntityParent r,mesh
   PositionEntity r, EntityX(camera), EntityY(camera),EntityZ(camera)
   EntityAlpha r,.5
   EntityFX r,16
   EntityShininess r,1
   EntityColor r,255,255,0
EndIf


Wenn ich nun aber auf die Taste 1 drücke, hält das Programm an, aber es passiert nix, man sicht nur die Würfel - nicht mal nen Fehler!

PS: Die Readme und die Beispieldatei las ich bereits....
-~= real coders just code in binary =~-

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group