0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 7

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

15.11.2019, 10:46. Показов 1298. Ответов 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
5096 / 2662 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
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
5096 / 2662 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
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
5096 / 2662 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
15.11.2019, 11:45
Где в условии про это сказано?
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 7
15.11.2019, 11:46  [ТС]
что-то типо этого.... я просто с Паскалем не работал ни разу, но появилась необходимость
Цитата Сообщение от Mister_Fit Посмотреть сообщение
Саша решил прислать Сереже несколько таких кодов картинок. Но при этом решил, что Сережа сам сможет определить размеры картинки. Саша только сказал, что картинки представляют собой прямоугольники. При этом ширина от высоты должна отличаться минимально. Если возможно, то это должен быть квадрат. Если квадрата не получается, то высота картинки (количество строк) должна быть меньше ширины (количества столбцов). В худшем случае, конечно, может получиться прямоугольник высотой в 1 точку.
0
 Аватар для JuriiMW
5096 / 2662 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
15.11.2019, 11:46
Вот так вот перед программистами и ставят задачи!
0
 Аватар для JuriiMW
5096 / 2662 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
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
5096 / 2662 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru