AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Rechteck finden in Bild
Thema durchsuchen
Ansicht
Themen-Optionen

Rechteck finden in Bild

Ein Thema von matashen · begonnen am 27. Aug 2007 · letzter Beitrag vom 27. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#1

Rechteck finden in Bild

  Alt 27. Aug 2007, 08:21
Hallo zusammen,

ich hab bei einem Bild beschriftete Rechtecke.

Ich soll jetzt in einem Programm Auswerten wo die Rechtecke liegen mit entsprechenden eckpunkten.

Was ich als Startpunkt habe ist der x/y Mittelpunkt des Rechteckes.

Nachdem aber im Rechteck auch eine Beschriftung ist kann ich nicht einfach "suchen bis schwarzer Punkt in +- x/y von Mittelpunkt" da dann meine Routine dann bei der Schrift stoppt.
Was mir das Ganze noch schwerer macht das zum Teil die Rechtecke dicht an dicht liegen.

Ich komm hier absolut nicht weiter wie ich die Rechtecke effizient und sicher erkennen könnte.

Zur veranschaulichung hab ich einen Bildausschnitt angehängt

Bin für jeden Tip dankbar.

Gruß Matthias
Angehängte Grafiken
Dateityp: bmp forumtest_202.bmp (28,6 KB, 73x aufgerufen)
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
kolbaschedder

Registriert seit: 24. Aug 2006
Ort: Schwäbisch Gmünd
55 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Rechteck finden in Bild

  Alt 27. Aug 2007, 09:09
Hallo,

wenn du für deine Rechtecke eine Minimale Kantenlänge angeben kannst, bsw. 11 Pixel, dann könntest du solange nach oben (unten, links, rechts) gehen, bis du auf ein schwarzes Pixel mit mindestens links und rechts davon 5 schwarzen Pixeln findest.

MfG
Kolbaschedder
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#3

Re: Rechteck finden in Bild

  Alt 27. Aug 2007, 09:31
Leider kann ich keine minimale Kantenlänge angeben, da auch größere Bereiche mit größerer Beschriftung auftauchen können.

Ich kann aber einen maximale Größe von 1/2 Bitmap.width/heigth annehmen was aber leider nur als abbruchbedingung nutzbar ist um bei Fehler/Ausnahmen einen Endloslauf zu verhindern.

Für eine mögliche Ausnahme habe ich ein Bild angehängt.

Wie ich diese dann behandel weis ich noch nicht, aber vorerst reicht mir die erkennung von Rechtecken.
Also rein als Info mit dabei.

Danke aber schon mal für den Lösungsansatz. Leider ists ein bischen komplizierter.

Gruß Matthias
Angehängte Grafiken
Dateityp: bmp forumtest2_144.bmp (121,7 KB, 43x aufgerufen)
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Rechteck finden in Bild

  Alt 27. Aug 2007, 09:43
Hallo,

wenn die Kanten der Rechtecke so schön exakt waagerecht und senkrecht verlaufen wie in deinem Bild, dann würde ich so vorgehen:

Per ScanLine():

(1) Alle senkrechten und waagerechten Kanten als Punktepaare in dynamischen Arrays VertEdges[] und HorzEdges[] feststellen.

(2) Alle Rechtecke über gleiche Eckpunkte der Kanten identifizieren.

Zusatzaufwand entsteht, wenn die Kantendicke variabel ist.

Grüße vom marabu

Nachtrag: Nimm statt der dynamischen Arrays besser eine TList, die ist effektiver beim Redimensionieren.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#5

Re: Rechteck finden in Bild

  Alt 27. Aug 2007, 10:00
Danke Marabu, der Gedanke ist Klasse aber

Zitat:
Per ScanLine():

(1) Alle senkrechten und waagerechten Kanten als Punktepaare in dynmischen Arrays VertEdges[] und HorzEdges[] feststellen.
Da hab ich nix Ahnung wie ich das machen soll , da ich bisher den Umgang mit Scanline gescheut habe (Variable Farbtiefe der zu bearbeiteten Bitmaps) und ich keinen Peil hab wie ich das dann in den Arrays anlegen soll

Zitat:
(2) Alle Rechtecke über gleiche Eckpunkte der Kanten identifizieren.
Da seh ich kein Problem das bekomm ich hin

Zitat:
Zusatzaufwand entsteht, wenn die Kantendicke variabel ist.
Müßte ich da nicht einfach gucken welche Linien also Punktpaare gleich sind.

Was ich am ende haben möchte(muss) ist eine Liste die ungefähr so aussieht

[ RECHTECK ]
Bezeichner: X-Offs. Y-Offs. obenlinks untenrechts
C803 723 428 ??? ???

Die mit ??? angegebenen Werte muss ich eben ermitteln.

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#6

Re: Rechteck finden in Bild

  Alt 27. Aug 2007, 10:07
Moin, moin,

Du jagst also Bauelementbeschriftungen. Zerlegen wir das mal in Teilaufgaben:

1. Positionieren im umrahmten Bereich
2. finden der maximalen Top, Bottom, Left und Rigth Positionen
3. Erkennen der Ecken (falls Ecken da)


Sind wir also bei 2. Hier gibt es natürlich viele Varianten. Allgemein ist das jetzt eine Pfadsuche zu einem Extema wo Deine Schildkröte (noch ohne Namen) nur auf weissen Punkten laufen kann.

Das hier könnte weiterhelfen
A* Pfadfindung


Grüße // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#7

Re: Rechteck finden in Bild

  Alt 27. Aug 2007, 10:14
Tach auch mschaefer,

schön das du erkennst das es sich um Bauteile handelt, aber ich jage nicht die Beschriftungen, und ich weis auchnicht was mir der A_Stern bringen sollte. ich suche ja Rechtecke und keinen kürzesten Weg.

Die Beschriftungen sind mir auch egal, da ich ja bereits als Daten den Bezeichner und x,y Offset habe, aber wie ich an die Eckpunkte des rechtecks kommen soll ist mir schleierhaft.

Gruß Matthias



PS: Das zerlegen in Teilaufgabe kannst knicken
1. Ich nicht positionieren muß da ich den xy-Offset weis, das heit ich spring von Teil1 zu Teil2
2.nicht der max sonder DER Positionen des Rechtecks interessieren mich
3.Bei einem Rechteck sollten Rechtecke sein, andernfalls würd ich ja nach Rechtrunden oder sowas fragen
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Rechteck finden in Bild

  Alt 27. Aug 2007, 10:54
Hallo Matthias,

wenn du die Rechtecke nach der von mir vorgestellten Methode identifiziert hast, dann kannst du deine Mittelpunkt-Koordinaten mit PtInRect() gegen die Liste der Rechtecke prüfen und so deine Komponentenliste aufbauen.

Freundliche Grüße
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#9

Re: Rechteck finden in Bild

  Alt 27. Aug 2007, 11:09
Ist PtInRect ein Win-API

benutze Delphi, da ist mir der Befehl unbekannt ?

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Rechteck finden in Bild

  Alt 27. Aug 2007, 11:12
Ja, eine Funktion der WinAPI. Einfach die Unit Windows einbinden und er ist bekannt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz