Wie zu verwenden OpenCV, um zu entfernen der nicht-text-Bereiche von einer Visitenkarte?
mein Ziel ist es, entfernen Sie alle nicht-text-Bereich aus einer gescannten Visitenkarte Bild aber ich weiß nicht, die Schritte auszuführen, die mithilfe von OpenCV , ich habe diese Schritte aber nicht wissen, ist er der richtige oder nicht, auch ich nicht feststellen, keine änderung im Bild (nicht text-Bereichen bleibt) jede Idee wird sehr hilfreich sein,danke.
1) konvertieren Sie das Bild in Graustufen
2) binaries das Bild
3) invertieren die Farben (cv::bitwise_not), um einen weißen Pixel text
4) Nagen an dem Bild(cv::erode)
5) Kanten mit canny
6) erkennt text lines mit hough-Transformation (noch nicht)
code:
cv::Mat greyMat = [self.imageView.image CVGrayscaleMat];
cv::Mat bwMat;
cv::threshold(greyMat, bwMat, 128, 255, CV_THRESH_BINARY);
cv::bitwise_not(bwMat, bwMat);
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(2, 1));
cv::erode(bwMat, bwMat, element);
std::vector<cv::Point>points;
cv::Mat_<uchar>::iterator it=bwMat.begin<uchar>();
cv::Mat_<uchar>::iterator end=bwMat.end<uchar>();
for (; it!=end; ++it)
if (*it)
points.push_back(it.pos());
cv::RotatedRect box=cv::minAreaRect(cv::Mat(points));
plImage* smothedImage=new IplImage(bwMat);
cvSmooth(smothedImage, smothedImage);
cvCanny(smothedImage, smothedImage, 10, 100);
- Was haben Sie versucht? Können Sie versuchen, schmalen deine Frage auf etwas bestimmtes, sonst denke ich, dass dies geschlossen werden wird, für "nicht konstruktiv"
- ich aktualisiert meine Frage
- Bitte geben Sie ein Beispiel-Bild, wie gut, @PatrickJones
Du musst angemeldet sein, um einen Kommentar abzugeben.
einen Weg zu definieren, das logo könnte sein, dass die logo-Teile enthalten, dicker Linien und größere blobs als text-Teile.
Wenn dies zutrifft, können Sie entfernen Sie das logo wie diesem:
(Ich habe imagemagick erzeugen die folgenden Beispiele sollten Sie in der Lage, das gleiche mit opencv)
0) Schwellenwert für das Bild (optional)
1) erweitern Sie das Bild, bis alle Buchstaben sind Weg, aber einige Teile des Logos bleiben.
oder
2) bedingt-zu einer Aushöhlung der dilatierten Bildes mit dem ursprünglichen Bild, das als Maske dient, bis das logo ist wieder komplett.
Bedeutet dies, dass Sie zu einer Aushöhlung der dilatierten Bild, aber nie ein pixel-Wert unter dem Wert in der ursprünglichen Quelle Bild. Verwenden Sie das original-Bild als Maske zu schützen, die Teile des Bildes von änderungen.
diese Wiederherstellung aller Formen, haben noch einige Samen Teil Links, so dass nur das logo
oder
haben Sie jetzt ein Bild NUR mit dem logo und kein text, dieses Bild verwenden, das logo zu entfernen
Wie Sie sehen können, es ist bei weitem nicht perfekt.
Vielleicht Spielzeug, um mit der schwellenwertbestimmung, Dilatation kernel etc, in opencv, um zu sehen, ob dies verbessert werden kann. Aber ich bezweifle, dass es eine Allgemeine Lösung, die entfernt alle logos und kein text
EDIT: ein paar Bilder Hinzugefügt