![]() |
Ис нова об распознавании картинок
Тема была затронута не раз. Но всё же.
Есть изображение: на странице http://l2top.ru/?voteme=1139&rating=full , требуется (как сбственно вы и догадались) распознать эту картинку. При взгляде на это изображение срузу понятно что нет никакой защиты от распознавания - фон достаточно отличается от цвета цифр, цифры всегда имеют иди и тот же шрифт , размер и располагаются строго по центру. Какой алгоритм здесь подойдет - распознавание по байтам или распознавание по шаблону (если кто знает четкий алгоритм скажите) ? |
Начал писать код на пасе (делфи), возникла проблемка:
загружаю картинку со страницы http://l2top.ru/?voteme=1139&rating=full , сохраняю файлик как ЖПГ, открываю в mspaint, сохраняю как монохромный, плучается здорово ! Попытался реализовать аналогичное на делфи - не катит, получается все равно 24 бита: function JPEG2BMP(const JPGFile, BMPFile: string): boolean; var JPG: TJPEGImage; BMP: TBitmap; begin JPG:= TJPEGImage.Create; BMP:= TBitmap.Create; try JPG.LoadFromFile(JPGFile); BMP.PixelFormat:= pf1bit; BMP.Assign(JPG); BMP.SaveToFile(BMPFile); finally FreeAndNil(JPG); FreeAndNil(BMP); Result:= FileExists(BMPFile); end; end; |
Наверно не в той ветке создал эту тему. С формулируй вопрос правильней!
|
тут достаточно определить цвет цифр, а так цифры всегда стоят на одних и тех же местах просто берем точку с нужной координатой. но тут возможно наложении на нее шума, поэтому берем область одной из цифр размерами 5х5 и находим тот цвет который встречается чаще - это и будет искомый. делаем с этого всего битовую матрицу - 1-пиксель принадлежит цифре, 0 - не принадлежит. сравниваем количество точек при совмещении. все.
|
Может быть проще сравнивать по заранее готовому шаблону ? Именно так я и хочу сделать, т.е. у меня имеются 10 файлов с готовыми шаблонами цифр - от 0 до 9, такого же размера как и на примере картинки и четко черно-белого цвета, далее просто дело прямых рук написания кода для сравнения, с этим у меня проблем, думаю не будет.
Но вот проблемка в преобразовании цветной картинки JPeG в черно-белую BMP (код см. выше), не могу понять почему не работат, думаю что компонент делфи как то кривовато работает, может есть другой способ? |
Вобщем с изобрадением я разобрался, вот код:
function setBWColor(c: TColor): TColor; begin if c > (255*255*255)/2 then c := clWhite else c := clBlack; Result := c; end; procedure TForm1.Button1Click(Sender: TObject); var h, w: Integer; begin for w := 0 to Image1.Width-1 do for h := 0 to Image1.Height-1 do Image1.Canvas.Pixels[w,h] := setBWColor(Image1.Canvas.Pixels[w,h]); end; В результате из BMP-шной картинки получается монохромное изображение. Теперь задача его раскодировать |
Цитата:
непредвиденное обстоятельство, да?)) |
Ну, вобщем приложение готово, работает по шаблону, всё очень просто
вот код Код:
unit Unit1;p.s. работает только для картинки по адресу http://l2top.ru/?voteme=1139&rating=full , но на этой основе можно забадяжить своё :) |
Цитата:
|
А такая красивая функция encodeImg(), аж прямо ужас
|
| Время: 23:17 |