2016-08-22 3 views
0

Ich versuche, das Bild zu entweihen und dann das Skelett eines Bildes mit einer handschriftlichen Zeile zu extrahieren. Ich möchte, dass die Linie kontinuierlich und solide ist, aber die Methode, die ich verwende, funktioniert nicht und ist relativ langsam. Hier ist das Originalbild: Original ImageReinigen eines gescannten Bildes in opencv

Morphed Auf dem gemorphte Bild können Sie eine kleine Insel an der unteren rechten Seite.

Das verdünnte Bild von oben zeigt, dass die Linie nahe dem Ende gebrochen ist.

Jede andere Methode, um das gewünschte Ergebnis zu erzielen?

Mein Code sieht wie folgt aus:

int morph_elem = 2; 
int morph_size = 10; 
int morph_operator = 0; 

Mat origImage = imread(origImgPath, CV_LOAD_IMAGE_COLOR); 
medianBlur(origImage, origImage, 3); 
cvtColor(origImage, origImage, COLOR_RGB2GRAY); 
threshold(origImage, origImage, 0, 255, THRESH_OTSU); 

Mat element = getStructuringElement(morph_elem, Size(2 * morph_size + 1, 2 * morph_size + 1), cv::Point(morph_size, morph_size)); 

morphologyEx(origImage, origImage, MORPH_OPEN, element); 
thin(origImage, true, true, true); 
+2

Auf dem binären Bild (nach der Schwelle) können Sie 'findContour', und entfernen Sie kleine, z. mit 'contourArea' – Miki

Antwort

1

die Linie brechen weg zu reduzieren versuchen adaptiveThreshold verwenden, mit den Methoden und Größen spielen, um zu sehen, was am besten funktioniert. Um die kleine Insel zu entfernen einfach tun findContours und dann ausblenden unerwünschte Spezifikationen mit drawContours mit color=(255,255,255) und thickness=-1, nachdem Sie es mit etwas wie wantedContours = [x for x in contours if contourArea(x) < 50] gefiltert haben.

Verwandte Themen