Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
8 / 8 / 1
Регистрация: 24.10.2013
Сообщений: 205
1

Квантование яркости изображения

16.03.2016, 15:11. Просмотров 1630. Ответов 23
Метки нет (Все метки)

Необходимо создать программу, которая производит квантование яркости монохромного изображения по заданному количеству квантов.
Вот что у меня получилось:
Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, Buttons, ExtCtrls, jpeg;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    BitBtn1: TBitBtn;
    SpinEdit1: TSpinEdit;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.BitBtn1Click(Sender: TObject);
 var
  R,G,B:byte;
  x,y: Integer;
begin
    for x := 1 to Image1.Width  do
 begin
  for y := 1 to Image1.Height  do
     begin
        R:=round(round(GetRValue(Image1.Canvas.Pixels[x,y])/(255/spinedit1.Value))*(255/spinedit1.Value));
        G:=round(round(GetGValue(Image1.Canvas.Pixels[x,y])/(255/spinedit1.Value))*(255/spinedit1.Value));
        B:=round(round(GetBValue(Image1.Canvas.Pixels[x,y])/(255/spinedit1.Value))*(255/spinedit1.Value));
        Image2.Canvas.Pixels[x,y]:=RGB(R,G,B);
     end;
    end;
   end;
 
 
end.
Программа запускается, но при вводе количества квантов и нажатии на кнопку выдает ошибку Can only modify an image if it contains a bitmap
Подскажите, пожалуйста, что нужно изменить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2016, 15:11
Ответы с готовыми решениями:

Коррекция яркости изображения
Доброго времени препровождения на форуме! Наведите на мысль с чего и как начать: "Разработать...

Изменение яркости, контрастности, гаммы изображения
Все доброго времени суток. Есть Image в который загруженно изображение....как реализовать...

Определение порога на основе градиента яркости изображения
Есть алгоритм порогового преобразование изображения : procedure Threshold(Bitmap: TBitmap;...

Неравномерное квантование яркости изображения
Необходимо написать программу по заданию я нашел в интернете с помощью метода равномерного...

23
Модератор
60878 / 45695 / 31526
Регистрация: 18.05.2008
Сообщений: 109,952
16.03.2016, 15:18 2
А в Image1 никакой рисунок не загружен?
0
8 / 8 / 1
Регистрация: 24.10.2013
Сообщений: 205
16.03.2016, 15:22  [ТС] 3
Загружен.
0
Модератор
3468 / 2594 / 738
Регистрация: 19.09.2012
Сообщений: 7,956
16.03.2016, 15:23 4
Image2 пустой. Надо сначала задать размеры Битмапа в нем.
И индексация пикселей начинается с нуля.
1
8 / 8 / 1
Регистрация: 24.10.2013
Сообщений: 205
16.03.2016, 15:26  [ТС] 5
Цитата Сообщение от FIL Посмотреть сообщение
Надо сначала задать размеры Битмапа в нем.
А как это сделать?
0
Модератор
3468 / 2594 / 738
Регистрация: 19.09.2012
Сообщений: 7,956
16.03.2016, 15:41 6
Лучший ответ Сообщение было отмечено Евдокия как решение

Решение

Цитата Сообщение от Евдокия Посмотреть сообщение
А как это сделать?
Delphi
1
2
  Image2.Picture.Bitmap.Width := Image1.Picture.Bitmap.Width;
  Image2.Picture.Bitmap.Height := Image1.Picture.Bitmap.Height;
1
8 / 8 / 1
Регистрация: 24.10.2013
Сообщений: 205
16.03.2016, 15:51  [ТС] 7
Получится вот так?
Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, Buttons, ExtCtrls, jpeg;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    BitBtn1: TBitBtn;
    SpinEdit1: TSpinEdit;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.BitBtn1Click(Sender: TObject);
 var
  R,G,B:byte;
  x,y: Integer;
 
begin
 Image2.Picture.Bitmap.Width := Image1.Picture.Bitmap.Width;
  Image2.Picture.Bitmap.Height := Image1.Picture.Bitmap.Height;
 
    for x := 0 to Image1.Width  do
 begin
  for y := 0 to Image1.Height  do
     begin
        R:=round(round(GetRValue(Image1.Canvas.Pixels[x,y])/(255/spinedit1.Value))*(255/spinedit1.Value));
        G:=round(round(GetGValue(Image1.Canvas.Pixels[x,y])/(255/spinedit1.Value))*(255/spinedit1.Value));
        B:=round(round(GetBValue(Image1.Canvas.Pixels[x,y])/(255/spinedit1.Value))*(255/spinedit1.Value));
        Image2.Canvas.Pixels[x,y]:=RGB(R,G,B);
     end;
    end;
   end;
 
 
end.
Только теперь при нажатии кнопки изображение вообще исчезает...
0
8 / 8 / 1
Регистрация: 24.10.2013
Сообщений: 205
17.03.2016, 17:37  [ТС] 8
Вот сам проект. Помогите, пожалуйста, исправить ошибки.
0
Вложения
Тип файла: rar Новая папка.rar (244.4 Кб, 15 просмотров)
3308 / 2856 / 771
Регистрация: 29.08.2013
Сообщений: 19,220
Записей в блоге: 1
17.03.2016, 17:54 9
какие ошибки?
0
8 / 8 / 1
Регистрация: 24.10.2013
Сообщений: 205
17.03.2016, 17:57  [ТС] 10
Почему при нажатии на кнопку, вместо квантования, изображения исчезают.
0
Модератор
3468 / 2594 / 738
Регистрация: 19.09.2012
Сообщений: 7,956
17.03.2016, 18:07 11
Лучший ответ Сообщение было отмечено Евдокия как решение

Решение

Цитата Сообщение от Евдокия Посмотреть сообщение
Почему
Потому что у тебя картинка в формате jpeg, а надо bmp.
1
8 / 8 / 1
Регистрация: 24.10.2013
Сообщений: 205
17.03.2016, 18:16  [ТС] 12
Спасибо, но квантования почему-то всё равно не происходит...Может, нужно что-то добавить в код?
0
Модератор
3468 / 2594 / 738
Регистрация: 19.09.2012
Сообщений: 7,956
17.03.2016, 18:24 13
Цитата Сообщение от Евдокия Посмотреть сообщение
но квантования почему-то всё равно не происходит
А что происходит?
0
8 / 8 / 1
Регистрация: 24.10.2013
Сообщений: 205
17.03.2016, 18:26  [ТС] 14
Насколько я вижу, ничего
0
Модератор
60878 / 45695 / 31526
Регистрация: 18.05.2008
Сообщений: 109,952
17.03.2016, 18:32 15
Почему это ничего?
1
Миниатюры
Квантование яркости изображения  
Модератор
60878 / 45695 / 31526
Регистрация: 18.05.2008
Сообщений: 109,952
17.03.2016, 18:34 16
Или вот
1
Миниатюры
Квантование яркости изображения  
8 / 8 / 1
Регистрация: 24.10.2013
Сообщений: 205
17.03.2016, 18:37  [ТС] 17
Странно... А почему у меня ничего не меняется?
0
Модератор
60878 / 45695 / 31526
Регистрация: 18.05.2008
Сообщений: 109,952
17.03.2016, 18:39 18
Видимо большие значения вводите. Почему-то только при маленьких что-то происходит(1 =1, 2=5), может формулы кривые?
1
8 / 8 / 1
Регистрация: 24.10.2013
Сообщений: 205
17.03.2016, 18:54  [ТС] 19
Puporev, а Вы ничего не меняли в исходном проекте?
0
Модератор
60878 / 45695 / 31526
Регистрация: 18.05.2008
Сообщений: 109,952
17.03.2016, 18:55 20
Только изменил формат рисунка на .bmp
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2016, 18:55

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

квантование изображения
такая проблема, мне нужно уменьшить число цветов в изображении (было 512 должно стать 256), но я...

Изменение яркости контрастности изображения. Бинаризация изображения
Товарищи программисты помогите с разработкой алкоритма для изменеие яркости контрастности...

Коррекци яркости изображения
Доброго времени препровождения на форуме! Наведите на мысль с чего и как начать: "Разработать...

Изменение яркости изображения
Здравствуйте! Столкнулся с такой проблемой: нужно изменить яркость изображения по формуле V=V+b...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.