Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

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

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

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

Пишу программу на Delphi 10.3.
Миниатюры
Нажмите на изображение для увеличения
Название: Без имени-3.jpg
Просмотров: 3
Размер:	46.0 Кб
ID:	95708  
Nockola вне форума   Ответить с цитированием
Старый 28.01.2019, 21:10   #2
Arigato
СуперПрограммист
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Адрес: Россия РФ Регистрация: 27.07.2008
Сообщений: 13,734
Репутация: 3618
По умолчанию

Если все не белые пиксели сделать серыми, а все белые черными, так не пойдет? Ну да, могут быть левые белые точки на самой картинке...
__________________
E-Mail: arigato.freelance@gmail.com
Arigato вне форума   Ответить с цитированием
Старый 05.02.2019, 20:51   #3
Nockola
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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, 22:13   #4
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Адрес: DS:SI
Сообщений: 117
Репутация: 256
По умолчанию

Цитата:
Сообщение от 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, 23:47   #5
Nockola
Пользователь
 
Регистрация: 26.12.2010
Сообщений: 11
Репутация: 10
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оставить только текст определенного цвета linguist Microsoft Office Word 1 14.06.2016 21: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 13:36


02:25.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru