Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2019, 19:21   #1
Nockola
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 13
По умолчанию Как оставить только текст на Image1

Здравствуйте господа!

Делаю распознавание текста, для дальнейшего его озвучивания. Текст нужно подготовить, чтобы прога легко его расшифровывала.

Как оставить только текст на картинке в Image1, зная что он написан белым цветом и окружён чёрной тенью.
Может есть какие-то готовые алгоритмы?

Пишу программу на Delphi 10.3.
Изображения
Тип файла: jpg Без имени-3.jpg (46.0 Кб, 124 просмотров)
Nockola вне форума Ответить с цитированием
Старый 28.01.2019, 20:10   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Если все не белые пиксели сделать серыми, а все белые черными, так не пойдет? Ну да, могут быть левые белые точки на самой картинке...
Arigato вне форума Ответить с цитированием
Старый 05.02.2019, 19:51   #3
Nockola
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Если все не белые пиксели сделать серыми, а все белые черными, так не пойдет? Ну да, могут быть левые белые точки на самой картинке...
Пойдёт, так сосбвенно и делаю картинку чёрно-белой, потом инвертирую и удаляю большие чёрные пятна, чтобы очистить картинку от мусора. Только работает это медленно. Картинку 500х200 обрабатывает 8 секунд. Меня бы устроило 0,2 секунды.

Вот так делаю чёрно-белой:
Код:
  for i := 0 to img1.Picture.Bitmap.Height-1 do
      for j := 0 to img1.Picture.Bitmap.Width-1 do
        begin
          Color := ColorToRGB(img1.Picture.Bitmap.Canvas.Pixels[j,i]);
          Mid := Round((GetRValue(Color)+GetGValue(Color)+GetBValue(Color))/3);
          if GetRValue(mid)<128 then Mid := 255 else Mid := 0; //инвертируем цвета
          img1.Picture.Bitmap.Canvas.Pixels[j,i] := RGB(Mid,Mid,Mid);
        end;
Может есть способы работать с изображением намного быстрей, чем стандартными методами?
Nockola вне форума Ответить с цитированием
Старый 05.02.2019, 21:13   #4
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
По умолчанию

Цитата:
Сообщение от Nockola Посмотреть сообщение
работать с изображением намного быстрей, чем стандартными методами?
См. стандартный метод TBitmap::ScanLine, минимум порядка на два быстрей.
На Дельфи переписать думаю не будет проблемой. Не забудь учесть формат изображения (bpp)
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)

{
  Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
// This example shows drawing directly to the Bitmap
  Byte *ptr;
  try
  {
    pBitmap->LoadFromFile("MyBitmap.png");
    for (int y = 0; y < pBitmap->Height; y++)
    {
      ptr = (Byte *)pBitmap->ScanLine[y];
      for (int x = 0; x < pBitmap->Width; x++)

        ptr[x] = (Byte)y;
    }
    Canvas->Draw(0,0,pBitmap);
  }
  catch (...)
  {
    ShowMessage("Could not load or alter bitmap");
  }
  delete pBitmap;
}
jillitil вне форума Ответить с цитированием
Старый 05.02.2019, 22:47   #5
Nockola
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от jillitil Посмотреть сообщение
См. стандартный метод TBitmap::ScanLine, минимум порядка на два быстрей.
На Дельфи переписать думаю не будет проблемой. Не забудь учесть формат изображения (bpp)
Да, спасибо, ScanLine ускоряет в 100 раз. Сейчас разбираюсь в нём..
Nockola вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оставить только текст определенного цвета linguist Microsoft Office Word 1 14.06.2016 20:15
как убрать середину оставить только контур chehroma Помощь студентам 1 15.11.2012 11:13
Как отсеять путь и оставить только имя? Чиполлино Общие вопросы Delphi 15 02.02.2012 08:53
Как оставить только заливку ячеек? tns-ka Microsoft Office Excel 5 09.04.2010 06:59
Как оставить только нужные строки? Palantir Microsoft Office Excel 6 18.03.2010 12:36