Ich suche nach einer Möglichkeit, Striche in handgezeichneten Skizzen zu finden. Mein aktueller Ansatz ist das adaptive Thresholding und findContours von OpenCV. Das Problem ist, dass findContours mir die rechte Seite und die linke Seite, die obere und untere Kontur eines einzelnen Striches gibt. Gibt es eine Möglichkeit, nur eine Konturdarstellung aus einem handgezeichneten Strich abzuleiten?Linienerkennung in Skizzen
Vielen Dank im Voraus
Edited:
Hier ist der Code und ein Bild von dem, was ich bisher erreicht habe:
Zuerst habe ich adaptive Schwellwertbildung auf das Anfangsbild angewandt:
Imgproc.GaussianBlur(image, image, new Size(5, 5), 3);
Mat thresholded = Mat.zeros(image.size(), CvType.CV_8U);
Dann habe ich findCountours auf das Schwellenwertbild und zusätzlich approxPolyDB auf jeder Kontur angewendet.
Imgproc.findContours(thresholded, contours, hierarchy, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE, new Point(0,0));
List<MatOfPoint> refinedContours = new ArrayList<MatOfPoint>();
for (int i = 0; i < contours.size(); i++) {
MatOfPoint2f approx = new MatOfPoint2f();
Imgproc.approxPolyDP(mop2mop2f(contours.get(i)), approx, 6, true);
}
Danach splitter ich jede Kontur an Punkten, wo der Winkel größer als eine feste Schwelle ist. Als letzten Schritt löschte ich alle Konturen, die nicht länger als eine bestimmte Schwelle sind.
In the picture you can see the thresholded image as the final contours
Mein Ziel ist parallel Konturen in einer Art und Weise zu verhindern, dass es nur eine Kontur für einen Hub im skizzierte Bild ist.
Dank
Könnten Sie Ihren Code und ein Beispielbild hinterlassen? – Berriel