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

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

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

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

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

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

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

21
 Аватар для ArtGrek
425 / 53 / 15
Регистрация: 31.12.2010
Сообщений: 191
25.02.2011, 22:44
Code
1
Memo1.Lines.Add(OpenDialog1.FileName);
1
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
26.02.2011, 10:53
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  [ТС]
это работает, спасибо) но можно как то сократить имя файла? чтобы выводилось непосредственно имя до .bmp .
0
240 / 218 / 46
Регистрация: 17.04.2010
Сообщений: 526
04.03.2011, 10:50
можно, смотри функции ExtractFileName и ExtractFileExt
0
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
04.03.2011, 14:46  [ТС]
вроде с именем разобралась. вот что получилось. если одно изображение выбрать то работает, а если несколько то записывает имя только первого. и еще, можно сделать так, чтобы при нажатии на выведенное имя в мемо что то делалось. в общем, суть была в том чтобы нажимаешь открыть выбираешь несколько файлов, имена в мемо записались. потом тыкаешь на имя и появляется само изображение. поможете??

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
Если имена потом нужно выбирать, то лучше использовать 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  [ТС]
а как теперь сделать так чтобы при нажатии на любую строчку в 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
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  [ТС]
имеется цветное изображение. преобразовала в серое..
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
Не совсем понятно, что нужно получить в конечном счете... Что понимается под словами "светлые удалились" и какие критерии для "нашлись все темные места"?
0
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
10.03.2011, 20:38  [ТС]
имеется изображение. надо найти маленькие полосочки, которые идут подряд. они называются трещины серебра. вот чтобы их найти думаю подойдет такой способ: цветное изображение преобразовать в серое, потом выделить темные области на нем, и далее работать с ними. длинные отбросить, оставить только короткие и чтобы шли подряд. только как это в делфи записать, ума не приложу!... (((
Вложения
Тип файла: 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
Задача не такая простая как может показаться на первый взгляд. По одной картинке трудно судить, т.к. можно подобрать алгоритмы и параметры которые будут отлично работать на одном изображении и не подойдут к другому. Судя по приложенной картинке, область с трещинами более контрастная, это можно использовать, при условии, что это не особенность конкретного изображения. Алгоритм может быть таким: преобразовать в серое, разбить изображение на равные области и оставить только те, где большой динамический диапазон, свертка для выделения границ. Это так, мысли в слух, в любом случае нужно пробовать, однозначно, парой строк кода не обойдется.
0
0 / 0 / 0
Регистрация: 25.02.2011
Сообщений: 8
12.03.2011, 20:43  [ТС]
ну это и понятно...я и не прошу все сразу, по маленьку потихоньку.. так.. вот что я уже сделала)
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
//эта процедура работает, но странно.. только на часть картинки...
У имиджа свойство 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  [ТС]
не могу я в image поставить тру на размер, ибо картинки оочень большие, а хотелось бы их в маленьком виде просматривать,я поставила на пропорцию тру... вторая процедура не работает в плане того что вообще ничего не выводит в image2... только лейбл менятся
0
0 / 0 / 0
Регистрация: 14.08.2011
Сообщений: 17
15.08.2011, 00:48
LiebeMein, а чего вы хотите добиться от обработки изображения?
0
0 / 0 / 0
Регистрация: 25.08.2011
Сообщений: 28
25.08.2011, 12:44
Подскажите пожалуйста, я в первый раз с таким сталкиваюсь.
Есть: три изображения в формате jpg. Фон у них общий, а в визио на двух из них дорисованы схемы коммуникаций двух фирм.
Как сделать программу, чтобы: сначала отображается чистый фон (файл есть), а при нажатии других кнопок - на него накладывается второе изображение и третье.
Заранее благодарю.
0
 Аватар для anonimus
2184 / 1255 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
25.08.2011, 17:19
ну ты покаж изображение
0
 Аватар для zybrzybr
18 / 17 / 0
Регистрация: 29.09.2010
Сообщений: 156
25.08.2011, 22:06
от второго отними первое, если есть разница не нулевая, то второе, а если нулевая, то тоже второе)) (фон же одинаковый!)

Добавлено через 1 минуту
Цитата Сообщение от LiebeMein Посмотреть сообщение
Всем привет. Надо написать прогу обработки изображений и вот какая проблема. Надо чтобы из папки можно было выбрать несколько изображений, а их имена записались в мемо...
if OpenDialog1.execute then
image1.Picture.LoadFromFile(OpenDialog1. filename);
Memo1.Lines.LoadFromFile(OpenDialog1.Fil eName);
вот эта штука не работает, в мемо выдает BM и цифру...(( и это для одного изображения, а вот как несколько выбрать из папки не знаю(((
помогите плиз..
Тема не актуальна уже??(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2011, 22:06
Помогаю со студенческими работами здесь

Обработка изображения
Имеется в Paint.Net и в фотошопе такая функция (в Paint.Net называется &quot;Волшебная палочка&quot;) - кликаешь с помощью этой палочки по...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru