Länge einer Linie auf einer Picturebox, Umrechnung auf Originalgröße

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Länge einer Linie auf einer Picturebox, Umrechnung auf Originalgröße

    Moin Moin,
    ich wolte mich kurz vorstellen, und auch gleich mal meine erste Frage loswerden.
    Ich
    bin Helge, komme aus dem schönen Norddeutschland, an der Küste, da wo
    andere Urlaub machen, verheiratet und arbeite als Systemadministrator in
    einem mittelständischem Unternehmen.
    Über ein Fernstudium habe ich
    erst Datenbanken (Access) kennen gelernt, und mich dann ein wenig mit
    VB.Net vertraut gemacht. Mittlerweile habe ich schon einige Programme in
    VB geschrieben, und ich merke, wie es mir immer wieder Freude bereitet,
    wenn ich mit diesen kleinen Helferlein die Arbeit erleichtern kann.
    Nun aber zu meinem Problem:
    Ich
    habe ein Programm, das das Livebild einer angeschlossenen Kamera
    anzeigt. Nach dem Klick auf eine Schaltfläche, wird das aktuelle
    Livebild als "Standbild" in eine weitere Picturebox "geladen".
    Nun
    möchte ich auf diesem "Standbild" eine Strecke vermessen. Ich ziehe also
    eine Linie von einem Punkt zu einem anderen, und möchte die Länge der
    Linie ausgeben.
    Ich bin da nun schon eine ganze Weile dran, und habe
    mich auch schon durch diverse Themen gelesen, aber irgendwie scheine ich
    nicht die richtige Lösung zu finden.
    Heute ist mir erstmal noch ein
    Licht aufgegangen, das ja das Bild, das angezeigt wird, nicht die
    Originalgröße des Objektes wiedergibt.
    Also, meine Frage ist eigentlich, wie finde ich die gemessene Länge des Bildes im Original herraus.
    Für die Berechnung der Länge der gezeichneten Linie nutzte ich den folgenden Code:

    Quellcode

    1. Dim px As Integer = Math.Sqrt((Math.Pow(P11.x - P21.x, 2)) + Math.Pow(P11.y - P21.y, 2))


    Vielen Dank für eure Denkanstöße ;)

    Gruß
    Helge

    *Thema verschoben* ~NoFear23m

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    Willkommen im Forum.

    ACHTUNG: Ich habe mit dem Thema selber keine Erfahrung, daher nur meine Meinung zu dem Problem:

    Das wird ohne Maßstäbe oder Referenzangaben anfangs ein Ding der Unmöglichkeit. Stell Dir ein Naturfoto vor: Eine große Wiese. Ein Baum hier, ein Baum dahinten. Und da noch ein paar Büsche. Das Gehirn kann aufgrund von Erfahrungswerte ungefähr abschätzen, was nah und was weit weg ist und so schlussfolgern, was in Realität wie groß ist. Aber ein Computerprogramm? Da gab's ja schon das ein oder andere Amazon-Angebot, bei dem sich dann rausgestellt hat, dass der angezeigte Gegenstand nur ein Fünftel so groß war wie das Foto vermuten ließ oder anderweitig abwich. Daher sind ja in seriösen Angeboten auch immer schriftliche Maßangaben dabei. mMn müsstest Du entweder immer einen Referenzrahmen dazu fotografieren, aus dem das Programm das dann ausrechnen kann oder per KI eine Objekterkennung.


    btw: Bitte aussagekräftige Titel verwenden, die das Problem beschreiben. Dass Du "der Neue" bist, sehe ich nicht als Problem ;)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Hallo VaporiZed,

    danke für die Antwort und den Denkanstoß. Ich bin nach einigem überlegen auch dazu gekommen, das dies eigentlich nur über eine Art Kalibrierung gehen kann. Hätte ich auch früher drauf kommen können ;)
    Ich denke, das wird dann am einfachsten so abgebildet, das man einen Maßstab unter die Kamera legt, auf dem genau 1cm abgebildet ist diese Strecke muss man dann "messen" und diesen Wer in die Datenbank schreiben, damit man diesen immer wieder abrufen kann. Dann müsste ich doch nur noch den Wert, auf dem Foto gemessen, mit dem Referenzwert multiplizieren, um dann die Originalgröße zu haben. Oder mach ich einen Denkfehler?
    Ach so, der Abstand der Kamera zum Objekt ist immer gleich ;)

    P.S.Titel angepasst ;)

    dopppartze schrieb:

    Oder mach ich einen Denkfehler?
    Ja.
    Diese Kalibrierung ist bei normalen Objektiven nur für die eingemessene Entfernung richtig.
    Sobald Du zwei Objekte in anderer oder unterschiedlicher Entfernung vermessen willst, geht das schief.
    In diesem Falle musst Du die 3D-Koordinaten jedes Objekts vermessen und kannst dann damit arbeiten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Okay, vielleicht kurz zur Erklärung, wozu diese Programm dienen soll.
    Es geht im groben Sinne um Qualitätssicherung.
    Es wird ein Objekt unter eine Kamera gelegt, diese Kamera hat immer den selben Abstand zum Objekt.
    Über das Bild sollen dann bestimmte Abstände des Werkstückes gemessen werden, zum Beispiel der Abstand zwischen zwei Bohrungen. Es wird also quasi nur 2D gemessen.
    @dopppartze Dann sollte es gehen.
    Aber:
    Überzeuge Dich davon, dass die Verzeichnung des Objektivs klein ist (ein Quadrat wird zu einem Kissen oder einem Fass "verbogen").
    Vermiss Deine Objekte innen und außen im Bildfeld.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!