Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 12

Преобразование цветного изображения в черно-белое

21.04.2015, 19:32. Показов 6222. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать программу, выполняющую преобразование цветного изображения в черно-белое, при этом в задаче требуют при переводе задать параметры преобразования. Заранее спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2015, 19:32
Ответы с готовыми решениями:

Определить время передачи цветного изображения по каналу, зная его пропускную способность
Средняя скорость передачи данных по некоторому каналу связи равно 28000 бит/с .Сколько секунд потребуется для передачи по этому каналу...

Перевод цветного изображения в черно-белое
Здравствуйте, нужно перевести цветное изображение в черно-белое (не в серо-белое), но я в этом особо ничего не понимаю, помогите...

Перевод цветного изображения в черно-белое
Нуждаюсь в помощи для реализации такой задачи: визуализировать изображение в оттенки серого. Qt для меня, как темный лес:sorry: и я совсем...

14
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
21.04.2015, 20:06
Перевести цветной рисунок в чёрно-белый
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 12
21.04.2015, 20:08  [ТС]
Там программа не рабочая я так понимаю(
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
21.04.2015, 20:17
Voland163, неправильно понимаете.
Преобразование происходит. Или вам нужно, чтобы загрузилась цветная картинка, и по нажатию клавиши был произведен перевод в черно-белое изображение?
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 12
21.04.2015, 20:45  [ТС]
Я так понимаю да, мне нужно именно как вы сказали

Добавлено через 19 минут
А как вы проверили происходит ли преобразование той программой? Опишите пожалуйста, если Вам не трудно
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
21.04.2015, 20:48
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
uses
  crt,graphabc;
const
  n=127;
  m=127;
var
  b:Picture;
  a:array [0..n,0..m] of longint;
  i,j:longint;
  s:real;
begin
  ClearWindow;
  b:=Picture.Create('hero.bmp');
  b.Load('hero.bmp');
  b.Draw(0,0);
  for i:=0 to n do
    for j:=0 to m do
      a[i,j]:=GetPixel(i,j);
      
  for i := 1 to n do
    begin
      for j := 1 to m do
        begin
          s  := s + a[i, j]
        end;
    end;
  s := s / n / m;
 
  for i := 1 to n do
    begin
      for j := 1 to m do
        begin
          if a[i, j] < s then
             a[i, j] := clBlack
          else
             a[i, j] := clWhite;
        end;
    end;
 
  readkey;
  ClearWindow;
  for i:=0 to n do
    for j:=0 to m do
      PutPixel(i,j,a[i,j]);
 
end.
Вложения
Тип файла: zip hero.zip (5.3 Кб, 30 просмотров)
1
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 12
22.04.2015, 06:37  [ТС]
Спасибо большое!

Добавлено через 9 часов 28 минут
А вы не могли бы подсказать как использовать программу

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var i, j, n, m: byte;
    s: real;
    a: array [1..100, 1..100] of byte;
begin
  s := 0;
  readln(n, m);
  writeln(n, m);
  for i := 1 to n do
    begin
      for j := 1 to m do
        begin
          read(a[i, j]);
          s  := s + a[i, j]
        end;
      readln
    end;
  s := s / n / m;
  writeln(s:0:4);
  for i := 1 to n do
    begin
      for j := 1 to m do
        begin
          if a[i, j] < s then a[i, j] := 0 else a[i, j] := 255;
          write(a[i, j], ' ')
        end;
      writeln
    end;
  readln
end.

для осуществления преобразования? Как ее связать с нужной картинкой?
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
22.04.2015, 10:09
Это уже сделано в моей программе.
Если вам нужно преобразовать вашу картинку, то вы меняете:
1. имя файла на имя вашей картинки
2. константы m, n заменить на размеры вашей картинки. n - ширина, m - высота
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 12
22.04.2015, 15:07  [ТС]
Да, это понятно.. просто внезапно узнал что в данной задаче нельзя использовать встроенные функции для открытия/обработки изображений (ограничение преподавателя). Вот я и подумал, что тот вариант программы, вероятно, то что нужно.. Вот и хотел спросить а как ее связать с картинкой? В Вашей этот процесс понятен

Добавлено через 7 минут
ZX Spectrum-128, Или данная задача не осуществима без этих функций?
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
22.04.2015, 17:05
Voland163, написать их аналоги придется.
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 12
22.04.2015, 17:30  [ТС]
ZX Spectrum-128, В том и проблема что с изображениями в паскале я дел вообще не имел, а объяснять больно-то не хотят.. "Выполнить преобразование цветного изображения в черно-белое, при переводе задать параметры преобразования. Результат сохранить в bmp-файле"

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var i, j, n, m: byte;
    s: real;
    a: array [1..100, 1..100] of byte;
begin
  s := 0;
  readln(n, m);
  writeln(n, m);
  for i := 1 to n do
    begin
      for j := 1 to m do
        begin
          read(a[i, j]);
          s  := s + a[i, j]
        end;
      readln
    end;
  s := s / n / m;
  writeln(s:0:4);
  for i := 1 to n do
    begin
      for j := 1 to m do
        begin
          if a[i, j] < s then a[i, j] := 0 else a[i, j] := 255;
          write(a[i, j], ' ')
        end;
      writeln
    end;
  readln
Я так понимаю нужна эта прога, потом нужно создать нетипизированный файл и залить туда как-то изображение, правильно?

Добавлено через 4 минуты
Или нужно оставить вашу прогу, а в ней GetPixel(i,j); PutPixel(i,j,a[i,j]); заменить на их какие-то аналоги?
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
22.04.2015, 17:48
Странные немного требования преподавателя, не использовать стандартные модули.
Кстати, в задании нет условия показать сами изображения, только преобразовать. В таком случае, нужно читать bmp (описание его формата можно легко найти), преобразовать его "на лету", и записать обратно в файл.
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 12
22.04.2015, 17:55  [ТС]
А преобразование обеспечит та самая программа?
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
22.04.2015, 18:07
Да, если читать bmp в массив.
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 12
22.04.2015, 19:14  [ТС]
Дело ясное, что дело темное.. ладно, спасибо вам большое)

Добавлено через 1 час 1 минуту
А такой код можно использовать для работы с bmp?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
unit bmpread; {процедуры для работы с Bmp}
interface
type
artype = array[0..0]of byte;
arptr = ^artype;
bmFileHeader = record   {заголовок файла}
Typf : word; {сигнатура}
Size : longint; {длина файла в байтах}
Res1 : word; {зарезервировано}
Res2 : word; {зарезервировано}
OfBm : longint; {смещение изображения в байтах (1078)}
end;
bmInfoHeader = record {информационный заголовок}
Size : longint; {длина заголовка в байтах (40)}
Widt : longint; {ширина изображения (в точках)}
Heig : longint; {высота изображения (в точках)}
Plan : word; {число плоскостей (1)}
BitC : word; {глубина цвета (бит на точку) (8)}
Comp : longint; {тип компрессии (0 - нет)}
SizI : longint; {размер изображения в байтах}
XppM : longint; {горизонтальное разрешение}
{(точек на метр - обычно 0)}
YppM : longint; {вертикальное разрешение}
{(точек на метр - обычно 0)}
NCoL : longint; {число цветов}
{(если максимально допустимое - 0)}
NCoI : longint; {число основных цветов}
end; 
bmHeader = record {полный заголовок файла}
f : bmFileHeader; {заголовок файла}
i : bmInfoHeader; {информационный заголовок}
p : array[0..255,0..3]of byte; {таблица палитры}
end;
 
bmhptr = ^bmHeader;
 
{чтение изображения из Bmp-файла}
procedure ReadBMP(image:arptr; {массив с изображением}
xim,yim:word;   {размеры}
pal:arptr;  {палитра}
filename:string); {имя файла}
 
{чтение заголовка Bmp-файла}
procedure ReadBMPheader(header:bmhptr;filename:string);
 
implementation
 
{$R-}
 
{чтение изображения из Bmp-файла}
procedure ReadBMP(image:arptr; xim,yim:word;
pal:arptr; filename:string);
var
h   : bmHeader;
i   : integer;
bmpfile : file;
s   : longint;
begin
assign(bmpfile,filename);
reset(bmpfile,1);
blockread(bmpfile,h,sizeof(h)); {чтение заголовка}
for i := 0 to yim-1 do begin    {построчное чтение}
blockread(bmpfile,image^[(yim-i-1)*xim],xim);
if (xim mod 4) <> 0 then
blockread(bmpfile,s,4 - (xim mod 4));
end;
close(bmpfile);
for i ^= 0 to 255 do begin {преобразование палитры}
pal^[i*3+2] := h.p[i,0] shr 2; {синий}
pal^[i*3+1] := h.p[i,1] shr 2; {зеленый}
pal^[i*3+0] := h.p[i,2] shr 2; {красный}
end;
end;
 
{чтение заголовка Bmp-файла}
procedure ReadBMPheader(header:bmhptr;filename:string);
var
bmpfile:file;
begin
assign(bmpfile,filename);
reset(bmpfile,1);
blockread(bmpfile,header^,sizeof(header^));
close(bmpfile);
end;
 
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2015, 19:14
Помогаю со студенческими работами здесь

Конвертация цветного изображения в черно-белое
Используя numpy, без питоновских циклов сконвертируйте цветное изображение в черно-белое по формуле: C = 0.2989 * R + 0.5870 * G +...

Преобразование изображения градаций яркости в черно-белое (монохромное)
Всем доброго дня! Уже который день мучаюсь с одним заданием по лабораторной работе. Задание след.: Преобразовать изображение...

Перевод изображения в черно-белое и multiproccesing
Здравствуйте, форумчане, нужна ваша помощь. Пытаюсь распараллелить данный код (в начале с помощь библиотеки PIL переводим изображение в...

Убрать пятна, касающиеся края изображения. Изображение черно-белое
Здравствуйте! У меня два вопроса... 1) Подскажите пожалуйста если я загружаю картинку BMP c глубиной цветом 1 бит и настройками AutoSize,...

Преобразование изображения в чёрно-белое
Доброго времени суток. У меня такая проблемка. Нужно чтобы при нажатии на кнопку выбранная картинка становилась чёрно белой. Почитал что...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru