Ich habe ein Qt-Projekt mit opencv und c++. Es handelt sich um ein Konturerkennungsprogramm, das die Konturen einer handgezeichneten Skizze erkennt, sie einem Polygon annähert und die Ausgabe auf einem zweiten Etikett anzeigt. Es gibt übergeordnete und untergeordnete Konturen. Wenn eine Kontur keine untergeordneten Konturen hat, handelt es sich um eine übergeordnete Kontur ohne Löcher. Wenn das übergeordnete Element zufällig untergeordnete Konturen hat, bedeutet das, dass es Löcher enthält.
Mein Problem ist, dass die Ausgabe fragmentiert ist, wenn die Kontur offen ist (also das übergeordnete Element keine untergeordneten Elemente hat). Es sieht so aus, als ob einige Punkte nicht richtig erkannt wurden. Ich stelle sicher, dass die Argumente von „isClosed“ usw. richtig gesetzt sind, je nachdem, ob die Kontur geschlossen ist oder nicht. Aber das Problem bleibt bestehen.
Wie Sie sehen können, befindet sich links die Eingabe, bei der es sich um eine schwarze handgezeichnete Skizze handelt. Wenn Sie die Maus loslassen, werden die Konturen der Zeichnung (noch nicht an ein Polygon angenähert) als Umrisse in Blau um die Formen herum angezeigt (Ausgaben wie gewünscht). Auf der rechten Seite werden die angenäherten Polygone der gezeichneten Formen angezeigt (auch ausgegeben). Wie Sie sehen können, wird die geschlossene Kontur, die wie eine „8“ aussieht, genau wie gewünscht angezeigt, die anderen drei „offenen“ Konturen werden jedoch alle fragmentiert in Hell-Dunkel-Linien dargestellt.
Basierend auf dem, was ich bisher recherchiert habe, war alles, was ich als Antwort erhalten habe, entweder den Epsilon-Wert in etwas Größeres ODER Kleineres zu manipulieren oder den Schwellenwert zu ändern. Bei mir hat keiner davon funktioniert.
Hier ist meine OpenCV-Klasse, die die Kontur erkennt (ScribbleWidget):
Ich habe ein Qt-Projekt mit opencv und c++. Es handelt sich um ein Konturerkennungsprogramm, das die Konturen einer handgezeichneten Skizze erkennt, sie einem Polygon annähert und die Ausgabe auf einem zweiten Etikett anzeigt. Es gibt übergeordnete und untergeordnete Konturen. Wenn eine Kontur keine untergeordneten Konturen hat, handelt es sich um eine übergeordnete Kontur ohne Löcher. Wenn das übergeordnete Element zufällig untergeordnete Konturen hat, bedeutet das, dass es Löcher enthält. Mein Problem ist, dass die Ausgabe fragmentiert ist, wenn die Kontur offen ist (also das übergeordnete Element keine untergeordneten Elemente hat). Es sieht so aus, als ob einige Punkte nicht richtig erkannt wurden. Ich stelle sicher, dass die Argumente von „isClosed“ usw. richtig gesetzt sind, je nachdem, ob die Kontur geschlossen ist oder nicht. Aber das Problem bleibt bestehen. [img]https://i.sstatic.net/bseBFYUr.png[/img]
Wie Sie sehen können, befindet sich links die Eingabe, bei der es sich um eine schwarze handgezeichnete Skizze handelt. Wenn Sie die Maus loslassen, werden die Konturen der Zeichnung (noch nicht an ein Polygon angenähert) als Umrisse in Blau um die Formen herum angezeigt (Ausgaben wie gewünscht). Auf der rechten Seite werden die angenäherten Polygone der gezeichneten Formen angezeigt (auch ausgegeben). Wie Sie sehen können, wird die geschlossene Kontur, die wie eine „8“ aussieht, genau wie gewünscht angezeigt, die anderen drei „offenen“ Konturen werden jedoch alle fragmentiert in Hell-Dunkel-Linien dargestellt. Basierend auf dem, was ich bisher recherchiert habe, war alles, was ich als Antwort erhalten habe, entweder den Epsilon-Wert in etwas Größeres ODER Kleineres zu manipulieren oder den Schwellenwert zu ändern. Bei mir hat keiner davon funktioniert. Hier ist meine OpenCV-Klasse, die die Kontur erkennt (ScribbleWidget): [code]// priv class ScribbleWidgetPriv { friend ScribbleWidget;
// Create an empty canvas for contours (ensure the result canvas is blank) contourImage = cv::Mat::zeros(inputImage.size(), CV_8UC3); // Blank canvas for contours
for ( size_t i = 0; i < contours.size(); ++i ) { // Convert the current contour to a QPainterPath const auto& contour = contours[i]; QPainterPath path;
if ( !contour.empty() ) { path.moveTo(contour[0].x, contour[0].y);
// Use hierarchy to classify as parent or child if ( hierarchy[i][3] == -1 ) { // No parent, so it's a top-level (parent) contour parentPaths.append(path); } else { // Has a parent, so it's a nested (child) contour childPaths.append(path); } }
for (size_t i = 0; i < hierarchy.size(); ++i) { const cv::Vec4i& h = hierarchy[i]; int parentIdx = h[3]; // The index of the parent contour std::vector approxPolygon; bool hasChildren = (h[2] != -1); // Check if the contour has children bool isClosed = hasChildren; // Treat contours with children as closed
// Adjust epsilon for open vs closed contours double epsilon = isClosed ? 0.002 * cv::arcLength(contours[i], true) : 0.001 * cv::arcLength(contours[i], false);
// Approximate polygon based on open or closed status if (isClosed) { cv::approxPolyDP(contours[i], approxPolygon, epsilon, true); } else {
// Approximate the smoothed open contour cv::approxPolyDP(contours[i], approxPolygon, epsilon, false); }
Ich möchte ein benutzerdefiniertes Modell zurückgeben, nicht einen Sammelsegmenttyp. Dies ist mein Resolver, um Sortieren, Filtern, Pagination und Projektion anzuwenden.
public class...
Ich habe eine Abfrage, die gut funktioniert, wenn man manuell in MySQL Workbench eingibt, aber fehlschlägt, wenn sie vom Spring -Boot eingegeben werden. Die manuelle Abfrage lautet:
select...
Ich bin Programmieranfänger und erstelle derzeit eine Website als persönliches Projekt. Ich lief reibungslos, aber dann kam es plötzlich zu einer unerwarteten Ausgabe und ich blieb stehen. Ich habe...
Ich bin Programmieranfänger und erstelle derzeit eine Website als persönliches Projekt. Ich lief reibungslos, aber dann kam es plötzlich zu einer unerwarteten Ausgabe und ich blieb stehen. Ich habe...