Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Erkennen von geometrien in Bild (https://www.delphipraxis.net/186508-erkennen-von-geometrien-bild.html)

hedie 8. Sep 2015 10:56

Erkennen von geometrien in Bild
 
Liste der Anhänge anzeigen (Anzahl: 1)
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!

hedie 8. Sep 2015 15:19

AW: Erkennen von geometrien in Bild
 
Liste der Anhänge anzeigen (Anzahl: 2)
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;
}

hanvas 8. Sep 2015 17:12

AW: Erkennen von geometrien in Bild
 
Zitat:

Zitat von hedie (Beitrag 1315072)
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ö

hedie 9. Sep 2015 07:57

AW: Erkennen von geometrien in Bild
 
Zitat:

Zitat von hanvas (Beitrag 1315154)
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?

Sir Rufo 9. Sep 2015 08:06

AW: Erkennen von geometrien in Bild
 
Da gibt es doch DLLs und die kann man von Delphi direkt aufrufen


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 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 by Thomas Breitkreuz