Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 7

Перекодирование черно-белой картинки

15.11.2019, 10:46. Показов 1234. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сережа и Саша решили придумать свой алгоритм кодирования черно-белой картинки. Вначале при кодировании изображения они перечисляли цвета каждой точки: слева направо и сверху вниз. Белый цвет обозначали буквой «W», а черный –– «B».


Затем они решили улучшить метод: если буква повторяется несколько раз подряд, то надо записать ее один раз, сопровождая количеством повторений. Если буква используется один раз, то единицу после буквы ставить не нужно. При этом для простоты декодирования мальчики договорились, что количество повторений не может быть больше 9. Если какая-то буква повторяется больше 9 раз, то каждые 9 ее повторений заменяются буквой с цифрой 9, а потом, если нужно, то еще дописывается буква с оставшимся числом повторений. В этом формате изображение на рисунке кодируется так: W6B9B2WBW.

При таком кодировании можно однозначно восстановить цвет каждой точки картинки, но размеры картинки необходимо сохранять отдельно.

Саша решил прислать Сереже несколько таких кодов картинок. Но при этом решил, что Сережа сам сможет определить размеры картинки. Саша только сказал, что картинки представляют собой прямоугольники. При этом ширина от высоты должна отличаться минимально. Если возможно, то это должен быть квадрат. Если квадрата не получается, то высота картинки (количество строк) должна быть меньше ширины (количества столбцов). В худшем случае, конечно, может получиться прямоугольник высотой в 1 точку.

Сережа хочет побыстрей посмотреть, что за картинки прислал Саша. Он даже нашел программу, которая ему по матрице из 0 и 1 нарисует картинку. «0» обозначает черный цвет, а «1» –– белый цвет. Вот только времени преобразовать код в такую матрицу у Сережи нет. И он обратился к вам за помощью.

Помогите Сереже получить картинку в виде матрицы из 0 и 1.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2019, 10:46
Ответы с готовыми решениями:

Преобразование черно-белой картинки в массив и обратно в картинку
Привет. Короче я беру простую черно-белую картинку bmp формата и превращаю в массив пикселей static int ImageToArray(String...

Раскраска черно-белой фотографии
Доброго времени суток. У поселка юбилей, решили почтить всех тех, кто когда-то внес свою скромную (и не очень) лепту в развитие района. ...

Как в TImage сделать картинку черно белой?
Всем добра. Подскажите пожалуйста как в среде программирования Delphi,загруженную картинку в TImage сделать картинку черно белой. Картинка...

15
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.11.2019, 11:31
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
begin
  var s:=ReadString;
  if 'BW'.IndexOf(s.Last) > -1 then s+='1';
  s := s.Replace('WB', 'W1B').Replace('BW', 'B1W');
  var count := s.ToWords('BW'.ToArray).Select(word->StrToInt(word)).Sum;
  var h:=trunc(sqrt(count));
  while count mod h>0 do h-=1;
  var w:=count div h;
  var m:array [,] of integer;
  SetLength(m,h,w);
  var(r,c,color,n):=(0,0,-1,0);
  foreach var ch in s do
    case ch of
      'B' : begin while n>0 do begin m[r,c]:=color;n-=1;c+=1;if c=w then(c,r):=(0,r+1);end;color:=0;end;
      'W' : begin while n>0 do begin m[r,c]:=color;n-=1;c+=1;if c=w then(c,r):=(0,r+1);end;color:=1;end;
    else
      n:=StrToInt(ch);
    end;
  while n>0 do begin m[r,c]:=color;n-=1;c+=1;if c=w then(c,r):=(0,r+1);end;
  m.Println(1);
end.
1
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 7
15.11.2019, 11:37  [ТС]
JuriiMW, Входной файл
WB3W3
Вывод программы
1000111
Правильный ответ
1 7
1000111

то есть необходимо также узнать высоту и ширину
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.11.2019, 11:43
Вот же:
Цитата Сообщение от Mister_Fit Посмотреть сообщение
Помогите Сереже получить картинку в виде матрицы из 0 и 1.
Добавлено через 47 секунд
Всё! Ни каких доп условий не было… Так что, можете ………………
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 7
15.11.2019, 11:44  [ТС]
JuriiMW, но решение неверно так как не хватает размеров
Цитата Сообщение от Mister_Fit Посмотреть сообщение
Входной файл
WB3W3
Вывод программы
1000111
Правильный ответ
1 7
1000111
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.11.2019, 11:45
Где в условии про это сказано?
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 7
15.11.2019, 11:46  [ТС]
что-то типо этого.... я просто с Паскалем не работал ни разу, но появилась необходимость
Цитата Сообщение от Mister_Fit Посмотреть сообщение
Саша решил прислать Сереже несколько таких кодов картинок. Но при этом решил, что Сережа сам сможет определить размеры картинки. Саша только сказал, что картинки представляют собой прямоугольники. При этом ширина от высоты должна отличаться минимально. Если возможно, то это должен быть квадрат. Если квадрата не получается, то высота картинки (количество строк) должна быть меньше ширины (количества столбцов). В худшем случае, конечно, может получиться прямоугольник высотой в 1 точку.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.11.2019, 11:46
Вот так вот перед программистами и ставят задачи!
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.11.2019, 11:47
Где в этом тексте сказано, что нужно выводить размеры?
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 7
15.11.2019, 11:47  [ТС]
JuriiMW, ну извиняюсь) я не полностью указал формат вывода

Формат вывода

В первой строке 2 целых числа через пробел: h –– высота картинки (количество строк) и w –– ширина картинки (количество столбцов). Гарантируется, что w⋅ h ≤ 90000.

В следующих h строках записываются по w 0 и 1 в каждой без пробелов –– цвет каждой точки. 0 –– черный, 1 –– белый.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
15.11.2019, 11:49
Ну, дык, выведите их уже!
И не чего людям мозг парить!!!
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 7
15.11.2019, 11:51  [ТС]
JuriiMW, я объяснил, ни разу не работал с пасколем. Можете помочь?
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
15.11.2019, 11:56
Цитата Сообщение от Mister_Fit Посмотреть сообщение
с пасколем
Откуда ж у вас задание, при чём не из самых простых, для языка, название которого вы даже написать не можете?))

Добавлено через 7 секунд
Цитата Сообщение от Mister_Fit Посмотреть сообщение
с пасколем
Откуда ж у вас задание, при чём не из самых простых, для языка, название которого вы даже написать не можете?))
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 7
15.11.2019, 11:58  [ТС]
Sun Serega, олимпиадная работа. В названии забыл указать)
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
15.11.2019, 12:38
JuriiMW, BBB3BBB5W2 у Вас выводит 00000 00011
8 - нулей, а должно быть 12.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
15.11.2019, 13:26
Исходя из задания - такой последовательности не может быть. Хотя это:
Цитата Сообщение от JuriiMW Посмотреть сообщение
.Replace('WB', 'W1B').Replace('BW', 'B1W')
Таки костыль.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.11.2019, 13:26
Помогаю со студенческими работами здесь

Подобрать принтер для черно-белой печати, не лазерный
Требования: - струйный - возможность печати только черными чернилами - отсутствие чипа на картридже Можно как просто принтер,...

Изменение цвета белой картинки
Товарищи, можно ли с помощью js, изменить цвет картинки? Картинка белая, всё что требуется, это изменение ее цвета, использую цветовую...

Opencv красную часть картинки сделать белой
Всем привет! Немогу решить проблему. Имеется картинка и нужно все пиксели в картинке красного цвета заменить на белый, использую библиотеку...

Сделайте пожалуйста чтобы при увеличении белой картинки флаг тоже увеличивался
clc; clear all; C = imread('lab.jpg'); C(:,:,:)=255; x=0:size(C,2); y=round(20*sin(2*pi*x/size(C,2))); for j=1:size(C,2) ...

(nxrtf.dll Exportrtf) черно белые картинки
Привет всем! При использование метода ExportRTF из dll nxrtf.dll Почемуто в rtf файле картинка становится черно белой хотя в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru