AGB  ·  Datenschutz  ·  Impressum  







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

Erkennen von geometrien in Bild

Ein Thema von hedie · begonnen am 8. Sep 2015 · letzter Beitrag vom 9. Sep 2015
Antwort Antwort
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

Erkennen von geometrien in Bild

  Alt 8. Sep 2015, 09:56
Hallo zusammen

Ich möchte in einem Bild welches von einer Webcam kommt ein paar einfache geometrien erkennen und
nach der erkennung, deren Zentrum als P(x,y) erhalten. Wobei x und y des Pixels in der mitte der geometrie entspricht.

Anbei ein beispiel Bild in welchem es eine solche geometrie gibt.
Es handelt sich dabei um ein Fiducial auf einer Leiterplatte.

Gibt es für solche Anwendungen, fertige Libraries oder ähnliches?

Danke schonmal!
Miniaturansicht angehängter Grafiken
pcbfiducial2.jpg  
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#2

AW: Erkennen von geometrien in Bild

  Alt 8. Sep 2015, 14:19
Habe nun OpenCV gefunden. Ist aber C++

Habe nun kurz ein kleines Consolenprogramm mit OpenCV geschrieben, welches diese Aufgabe erledigt!
Anbei die exe im zip.

hier der Code:

Code:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>

using namespace cv;
using namespace std;

static void help()
{
    cout << "\nThis program demonstrates circle finding with the Hough transform.\n"
            "Usage:\n"
            "./houghcircles <image_name>, Default is pic1.png\n" << endl;
}

int main(int argc, char** argv)
{
    const char* filename = argc >= 2 ? argv[1] : "board.jpg";

   

    Mat img = imread(filename, 0);
    if(img.empty())
    {
        help();
        cout << "can not open " << filename << endl;
        return -1;
    }

    Mat cimg;
    medianBlur(img, img, 5);
    cvtColor(img, cimg, COLOR_GRAY2BGR);

    vector<Vec3f> circles;
    HoughCircles(img, circles, CV_HOUGH_GRADIENT, 1, 10,
                 100, 30, 1, 30 // change the last two parameters
                                // (min_radius & max_radius) to detect larger circles
                 );
    char myBuf[10];
   
   for( size_t i = 0; i < circles.size(); i++ )
    {
        Vec3i c = circles[i];

      cout << "x:" << Point(c[0],c[1]).x << " y:" << Point(c[0],c[1]).y << " r:" << c[2] << endl;

        circle( cimg, Point(c[0], c[1]), c[2], Scalar(0,0,255), 1, CV_AA);
        circle( cimg, Point(c[0], c[1]), 2, Scalar(0,255,0), 1, CV_AA);
    }

    imshow("detected circles", cimg);
    waitKey();

    return 0;
}
Miniaturansicht angehängter Grafiken
circles.png  
Angehängte Dateien
Dateityp: zip TestProjectOpenCV.zip (17,0 KB, 11x aufgerufen)
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
hanvas

Registriert seit: 28. Okt 2010
157 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Erkennen von geometrien in Bild

  Alt 8. Sep 2015, 16:12
Hallo zusammen
Gibt es für solche Anwendungen, fertige Libraries oder ähnliches?
Die Hough-Transformation (https://de.wikipedia.org/wiki/Hough-Transformation) bzw. die entsprechenden OpenCV Funktionen hast Du ja bereits gefunden.

Prinzipiell lässt sich jede mit Parametern beschreibbare Kurve finden, mit der verallgemeinerten Hough-Transformation kann man auch noch mehr machen.

Allerdings benötigt die Hough Transformation eine ganze Menge Rechenleistung.

Wenn Du OpenCV verwendest könntest Du auch folgenden Weg gehen

http://stackoverflow.com/questions/1...s-using-opencv

OpenCV Bindings für Delphi findest Du hier

https://github.com/Laex/Delphi-OpenCV

hth Ha-Jö
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#4

AW: Erkennen von geometrien in Bild

  Alt 9. Sep 2015, 06:57
Allerdings benötigt die Hough Transformation eine ganze Menge Rechenleistung.
Wie viel ist "eine ganze Menge"?

Es geht darum etwa zwei bis vier Bilder zu verarbeiten.
Bei mir hat das Testprogramm welches oben im Anhang zu finden ist, keine merkliche Systembelastung verursacht.

Meine idee ist, aus dem Delphiprogramm das Bild abzuspeichern z.B. als tmp.jpg und danach automatisch die Konsolenapplikation zu starten. Diese gibt dann X und Y Werte des Kreiszentrums aus.

Wäre dies ein vernünftiger Weg?
Oder verursacht das aufrufen der Konsolenanwenung im Hintergrund massive verzögerung in der Verarbeitung?
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Erkennen von geometrien in Bild

  Alt 9. Sep 2015, 07:06
Da gibt es doch DLLs und die kann man von Delphi direkt aufrufen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:03 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