Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
1

Обработка изображения

25.02.2011, 22:29. Показов 6002. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Надо написать прогу обработки изображений и вот какая проблема. Надо чтобы из папки можно было выбрать несколько изображений, а их имена записались в мемо...
Delphi
1
2
3
if OpenDialog1.execute then
image1.Picture.LoadFromFile(OpenDialog1.filename);
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
вот эта штука не работает, в мемо выдает BM и цифру...(( и это для одного изображения, а вот как несколько выбрать из папки не знаю(((
помогите плиз..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2011, 22:29
Ответы с готовыми решениями:

Обработка изображения (BitBlt)
Задача: Есть два изображения одинаковой размерности - B1: TBitmap, B2: TBitmap. Необходимо...

Сравнение изображения с ФРАГМЕНТОМ другого изображения
Добрый день! Выручите пожалуйста! Задача: Есть изображение 1 и изображение 2. Изображение 1...

Обработка изображения
Кто знает, каким образом обработать изображение, чтобы получилось нечто подобное? Оригинал:

Обработка изображения
Имеется в Paint.Net и в фотошопе такая функция (в Paint.Net называется "Волшебная палочка") -...

21
425 / 53 / 15
Регистрация: 31.12.2010
Сообщений: 191
25.02.2011, 22:44 2
Код
Memo1.Lines.Add(OpenDialog1.FileName);
1
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
26.02.2011, 10:53 3
Delphi
1
2
3
4
5
6
7
  with OpenPictureDialog1, Memo1 do begin
    Options:=Options + [ofAllowMultiSelect];
    if Execute then begin
      Clear;
      Lines.Assign(Files);
    end;
  end;
1
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
03.03.2011, 23:31  [ТС] 4
это работает, спасибо) но можно как то сократить имя файла? чтобы выводилось непосредственно имя до .bmp .
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
04.03.2011, 10:50 5
можно, смотри функции ExtractFileName и ExtractFileExt
0
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
04.03.2011, 14:46  [ТС] 6
вроде с именем разобралась. вот что получилось. если одно изображение выбрать то работает, а если несколько то записывает имя только первого. и еще, можно сделать так, чтобы при нажатии на выведенное имя в мемо что то делалось. в общем, суть была в том чтобы нажимаешь открыть выбираешь несколько файлов, имена в мемо записались. потом тыкаешь на имя и появляется само изображение. поможете??

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.gf1Click(Sender: TObject);
begin
 
 with OpenPictureDialog1 , Memo1 do
 begin
    Options:=Options + [ofAllowMultiSelect];
     if Execute then
    begin
      Clear;
      str:=FileName;
      Lines.Assign(files);
      lines.Add(ExtractFileName (str));
 
    end;
  end;              
 
end;
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
05.03.2011, 10:36 7
Если имена потом нужно выбирать, то лучше использовать ListBox
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  fname: string;
begin
  with OpenPictureDialog1, ListBox1 do begin
    Options:=Options + [ofAllowMultiSelect];
    Filter:='Bitmaps|*.bmp';
    if Execute then begin
      Clear;
      for i:=0 to Files.Count-1 do begin
        fname:=ExtractFileName(Files[i]);
        Items.Add(Copy(fname, 1, Length(fname)-4));
      end;
    end;
  end;
end;
в ListBox добавляются только имена без пути и расширения файла, но нужно понимать, что такой подход накладывает определенные ограничения, т.е. любо жесткая привязка к пути и расширению файла, либо нужно создавать еще один список который будет содержать полный путь, а ListBox использовать только для отображения и выбора.
1
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
05.03.2011, 20:32  [ТС] 8
а как теперь сделать так чтобы при нажатии на любую строчку в image вставлялась картинка, имя которой выбрали???
я вот что добавила, но ничего не происходит..(
Delphi
1
2
3
4
for c:=0 to Items.Count-1 do begin
          if (ItemIndex>-1) then
          Image1.Picture.LoadFromFile(fname);
        end;
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
06.03.2011, 08:27 9
ListBox обработчик OnClick
Delphi
1
2
3
4
5
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  with ListBox1 do
    Image1.Picture.LoadFromFile(Items[ItemIndex]+'.bmp');
end;
1
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
06.03.2011, 17:41  [ТС] 10
имеется цветное изображение. преобразовала в серое..
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
procedure TForm1.N1Click(Sender: TObject);
begin
W:=image1.Picture.Width;
H:=image1.Picture.Height;
for i:=1 to W-1 do
for j:=1 to H-1 do
x[i,j]:=image1.Canvas.Pixels[i,j];
 
max:=x[1,1];
min:=x[1,1];
 
  for i:=1 to W-1 do
   for j:=1 to H-1 do
     begin
     if (x[i,j]>max) then max:=x[i,j];
     if (x[i,j]<min) then min:=x[i,j];
     end;
 
   for i:=1 to W-1 do
    for j:=1 to H-1 do
     begin
     a1:=round((x[i,j]-min)/(max-min)*255);
     a2:=round((x[i,j]-min)/(max-min)*255);
     a3:=round((x[i,j]-min)/(max-min)*255);
     Image1.Canvas.Pixels[i-1,j-1]:=RGB(a1,a2,a3);
     end;
end;

как можно задать обработку чтобы нашлись все темные места, а все светлые удалились. и чтобы это не порогом задавать отдельно, а автоматически.
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
08.03.2011, 10:08 11
Не совсем понятно, что нужно получить в конечном счете... Что понимается под словами "светлые удалились" и какие критерии для "нашлись все темные места"?
0
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
10.03.2011, 20:38  [ТС] 12
имеется изображение. надо найти маленькие полосочки, которые идут подряд. они называются трещины серебра. вот чтобы их найти думаю подойдет такой способ: цветное изображение преобразовать в серое, потом выделить темные области на нем, и далее работать с ними. длинные отбросить, оставить только короткие и чтобы шли подряд. только как это в делфи записать, ума не приложу!... (((
Вложения
Тип файла: zip №2 Васильева А.А., 22 г, 19-20 нед, х400-1, 2 день.zip (524.9 Кб, 38 просмотров)
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
11.03.2011, 15:20 13
Задача не такая простая как может показаться на первый взгляд. По одной картинке трудно судить, т.к. можно подобрать алгоритмы и параметры которые будут отлично работать на одном изображении и не подойдут к другому. Судя по приложенной картинке, область с трещинами более контрастная, это можно использовать, при условии, что это не особенность конкретного изображения. Алгоритм может быть таким: преобразовать в серое, разбить изображение на равные области и оставить только те, где большой динамический диапазон, свертка для выделения границ. Это так, мысли в слух, в любом случае нужно пробовать, однозначно, парой строк кода не обойдется.
0
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
12.03.2011, 20:43  [ТС] 14
ну это и понятно...я и не прошу все сразу, по маленьку потихоньку.. так.. вот что я уже сделала)
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
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls, StdCtrls, ExtDlgs, ComCtrls;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    MainMenu: TMainMenu;
    gf1: TMenuItem;
    Close1: TMenuItem;
    OpenPictureDialog1: TOpenPictureDialog;
    N1: TMenuItem;
    ListBox1: TListBox;
    Splitter1: TSplitter;
    Button1: TButton;
    Image2: TImage;
    UpDown1: TUpDown;
    Edit1: TEdit;
    Button2: TButton;
    TrackBar1: TTrackBar;
    Label1: TLabel;
    procedure Close1Click(Sender: TObject);
    procedure gf1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure TrackBar1Change(Sender: TObject);
 
 
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
Type
 TArrByt=array [0..1028,0..1028] of byte;
 TArrReal=array [0..1028,0..1028] of real;
 
var
  Form1: TForm1;
  x: TArrByt;
  x1: TArrByt;
  x2,x4: TArrByt;
  y,y1: TArrReal;
  i,j,H,W:integer;
  str:string;
  max,min:real;
  a1, a2, a3 :byte;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Close1Click(Sender: TObject);
begin
Close;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Caption:='Обработка изображений фации крови';
TrackBar1.Enabled:=false;
end;
 
procedure TForm1.gf1Click(Sender: TObject);
var
fname:string;
begin
 with OpenPictureDialog1, ListBox1 do begin
    Options:=Options + [ofAllowMultiSelect];
    Filter:='Bitmaps|*.bmp';
    if Execute then begin
      Clear;
      for i:=0 to Files.Count-1 do begin
        fname:=ExtractFileName(Files[i]);
        Items.Add(Copy(fname, 1, Length(fname)-4));
       end;
     end;
 
  end;
end;
 
procedure TForm1.N1Click(Sender: TObject);
begin
W:=image1.Picture.Width;
H:=image1.Picture.Height;
for i:=0 to W-1 do
for j:=0 to H-1 do
x[i,j]:=image1.Canvas.Pixels[i,j];
 
max:=x[1,1];
min:=x[1,1];
 
  for i:=0 to W-1 do
   for j:=0 to H-1 do
     begin
     if (x[i,j]>max) then max:=x[i,j];
     if (x[i,j]<min) then min:=x[i,j];
     end;
 
   for i:=0 to W-1 do
    for j:=0 to H-1 do
     begin
     a1:=round((x[i,j]-min)/(max-min)*255);
     a2:=round((x[i,j]-min)/(max-min)*255);
     a3:=round((x[i,j]-min)/(max-min)*255);
     Image1.Canvas.Pixels[i-1,j-1]:=RGB(a1,a2,a3);
     end;
     TrackBar1.Enabled:=true;
end;
 
//эта процедура работает, но странно.. только на часть картинки...
procedure TForm1.ListBox1Click(Sender: TObject);
begin
  with ListBox1 do
Image1.Picture.LoadFromFile(Items[ItemIndex]+'.bmp');
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
porog: string;
porogint:integer;
L: pByteArray;
begin
porog:=edit1.Text;
porogint:=strtoint(porog);
if  (porogint<0) then porogint:=0;
if (porogint>255) then porogint:=255;
 
for i:=0 to Image1.Picture.Bitmap.Height - 1  do
  begin
   L := Image1.Picture.Bitmap.ScanLine[i];
    for j:=0 to Image1.Picture.Bitmap.Width- 1  do
   begin
      if (L^[j]<=porogint) then  L^[j]:=0 else L^[j]:=255;
   end;
 
     end;
        Image1.Refresh;
 
end;
 
//эта пока не работает, не пойму почему..
procedure TForm1.TrackBar1Change(Sender: TObject);
var
porog: byte;
begin
W:=image2.Picture.Width;
H:=image2.Picture.Height;
     porog:=TrackBar1.Position;
     Label1.Caption:=IntToStr(TrackBar1.Position);
  for i:=0 to W-1 do
    for j:=0 to H-1 do
     begin
     a1:=round((x[i,j]-min)/(max-min)*255);
     a2:=round((x[i,j]-min)/(max-min)*255);
     a3:=round((x[i,j]-min)/(max-min)*255);
     if (a1>porog) and (a2>porog) and (a3>porog) then
      Image2.Canvas.Pixels[i-1,j-1]:= RGB(a1,a2,a3)
        else   Image2.Canvas.Pixels[i-1,j-1]:=RGB(round(min),round(min),round(min));
     end;
 
 
end;
 
end.
в чем суть, хочу с помощью порога (0,255) провести бинаризацию,таким способом останется только то что нужно, а нужно найти все темные пиксели.
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
13.03.2011, 12:38 15
//эта процедура работает, но странно.. только на часть картинки...
У имиджа свойство AutoSize должно быть установлено в true.
//эта пока не работает, не пойму почему..
Что-то я логику не улавливаю, если картинка в градациях серого, то зачем проверять каждую компоненту, если нет, то условие (if (a1>porog) and (a2>porog) and (a3>porog) then) может не выполняться и зачем пиксел выводить в [i-1,j-1]?
0
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
13.03.2011, 13:59  [ТС] 16
не могу я в image поставить тру на размер, ибо картинки оочень большие, а хотелось бы их в маленьком виде просматривать,я поставила на пропорцию тру... вторая процедура не работает в плане того что вообще ничего не выводит в image2... только лейбл менятся
0
0 / 0 / 0
Регистрация: 14.08.2011
Сообщений: 17
15.08.2011, 00:48 17
LiebeMein, а чего вы хотите добиться от обработки изображения?
0
0 / 0 / 0
Регистрация: 25.08.2011
Сообщений: 28
25.08.2011, 12:44 18
Подскажите пожалуйста, я в первый раз с таким сталкиваюсь.
Есть: три изображения в формате jpg. Фон у них общий, а в визио на двух из них дорисованы схемы коммуникаций двух фирм.
Как сделать программу, чтобы: сначала отображается чистый фон (файл есть), а при нажатии других кнопок - на него накладывается второе изображение и третье.
Заранее благодарю.
0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
25.08.2011, 17:19 19
ну ты покаж изображение
0
18 / 17 / 0
Регистрация: 29.09.2010
Сообщений: 156
25.08.2011, 22:06 20
от второго отними первое, если есть разница не нулевая, то второе, а если нулевая, то тоже второе)) (фон же одинаковый!)

Добавлено через 1 минуту
Цитата Сообщение от LiebeMein Посмотреть сообщение
Всем привет. Надо написать прогу обработки изображений и вот какая проблема. Надо чтобы из папки можно было выбрать несколько изображений, а их имена записались в мемо...
if OpenDialog1.execute then
image1.Picture.LoadFromFile(OpenDialog1.filename);
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
вот эта штука не работает, в мемо выдает BM и цифру...(( и это для одного изображения, а вот как несколько выбрать из папки не знаю(((
помогите плиз..
Тема не актуальна уже??(
0
25.08.2011, 22:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2011, 22:06
Помогаю со студенческими работами здесь

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

Обработка изображения
Есть задача - плавно выводить данные в виде картинки на экран, те при поступлении новых данных...

Обработка изображения
Здравствуйте. В С программировать начал недавно. Необходимо реализовать алгоритм обработки...

Обработка изображения
Изображение загружается но ничего не обрабатывается, что можно сделать? &lt;html&gt; &lt;head&gt;...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru