Einzelnen Beitrag anzeigen

quantum

Registriert seit: 15. Apr 2006
Ort: Kassel
64 Beiträge
 
Delphi XE Professional
 
#17

Re: OCR für Arme, und ich bin noch ärmer

  Alt 1. Mai 2009, 02:43
Wenn du die genauen Anfangskoordinaten und den Zeichensatz kennst, brauchst du nur jedes sichtbare Zeichen des Zeichensatzes per Pixel zu vergleichen.
Hast du den ersten Buchstaben, dann kennst du die Breite und kannst mit dem nächsten Zeichen fortfahren.

Zur Beschleunigung könntest du dir vom Zeichensatz für jedes Zeichen eine Pixel-Checksumme bilden und die Breite vormerken.
Dann berechnest du an der aktuellen Position und Breite die Checksumme der Pixel und vergleichst sie mit der vorbereiteten Liste der Checksummen/Zeichenbreiten.

Evtl. müsstest du in der Liste manche Zeichen umsortieren, damit zB ein "W" nicht als "V" erkannt wird.

Pseudocode:
Delphi-Quellcode:
function TextLineAtBitmapPos(Bitmap: TBitmap; XPos, YPos: Integer): String;
  result := '';

  repeat
    for width := MINWIDTH to MAXWIDTH do begin
      checksum := CalcPixelChecksum(Bitmap, XPos, YPos, width);
      foundChar := FindInList(width, checksum);
      if foundChar <> #0 then begin
        result := result + foundChar;
        Inc(XPos, width);
        break;
      end;
    end;
  until foundChar = #0;
end;
Nur so eine Idee...
  Mit Zitat antworten Zitat