![]() |
Rechteck finden in Bild
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
Re: Rechteck finden in Bild
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 |
Re: Rechteck finden in Bild
Liste der Anhänge anzeigen (Anzahl: 1)
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 |
Re: Rechteck finden in Bild
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. |
Re: Rechteck finden in Bild
Danke Marabu, der Gedanke ist Klasse :thumb: aber :!:
Zitat:
Zitat:
Zitat:
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 |
Re: Rechteck finden in Bild
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 ![]() Grüße // Martin |
Re: Rechteck finden in Bild
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 :mrgreen: |
Re: Rechteck finden in Bild
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 |
Re: Rechteck finden in Bild
Ist PtInRect ein Win-API
benutze Delphi, da ist mir der Befehl unbekannt ? Gruß Matthias |
Re: Rechteck finden in Bild
Ja, eine Funktion der WinAPI. Einfach die Unit Windows einbinden und er ist bekannt.
|
Re: Rechteck finden in Bild
Deine Code-Vervollständigung zeigt dir die benötigten Parameter:
Delphi-Quellcode:
var
r: TRect; p: TPoint; begin if PtInRect(r, p) then ... end; |
Re: Rechteck finden in Bild
Noch ne Frage,
Sorry Marabu, aber möchte erst alles Verstanden haben bevor ich losleg und noch grundlegende Fehler mache. Du hast erwähnt ich soll die Ecken suchen und bei variabler Kantendicke entsteht mehr Zeitaufwand. Wie meinst du das und wenn ich schon die Ecken erkenne wäre es dann nicht sinnvoller vier Arrays zu machen, da ich ja dann schon sagen kann ob die Ecke links/rechts/oben/unten ist. Gruß Matthias |
Re: Rechteck finden in Bild
Als erstes suchst du die Kanten, nicht die Ecken.
Delphi-Quellcode:
Implementiere zuerst den trivialen Fall (Kantendicke = 1 Pixel). Wenn du die Kanten hast, dann kannst du Rechtecke zusammenstellen. Es wird genau vier Kanten geben, zwei vertikale und zwei horizontale, welche gemeinsame Punkte (die Ecken) aufweisen.
type
TVertEdge = record Top: TPoint; Bottom: TPoint; end; THorzEdge = record Left: TPoint; Right: TPoint; end; Dickere Kanten sind eine relativ einfache Erweiterung. Es läuft darauf hinaus, dass Kanten länger als breit sein müssen und dass du Rechtecke findest, welche ineinander verschachtelt sind. Es werden nur die jeweils äußeren Rechtecke weiter betrachtet, die inneren sind Artefakte des Algorithmus. |
Re: Rechteck finden in Bild
Danke Marabu,
jetzt hab ichs kapiert, ich werd mal das ganze schreiben und denke das ichs hinbekomme. Scanline hab ich mir auch angesehen. Vielen Dank für die ausführliche Hilfestellung Gruß Matthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz