Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.03.2013, 15:19
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию Поиск картинки в картинке

Код:
procedure TForm1.Timer2Timer(Sender: TObject);
var
fl: TStringList;
i,j: integer;
begin
Timer2.Enabled:=false;
Fl:=TStringList.Create;
Search('****',fl);
jpg1.LoadFromFile(Fl[Fl.Count-1]);
BT1.Assign(JPG1);
jpg2.LoadFromFile('C:\***\готов.jpg');
BT2.Assign(JPG2);
for i:=0 to BT1.Height - 1 do
 for j:=0 to BT1.Width - 1 do
  begin
   if BT1.Canvas.Pixels[j,i]=BT2.Canvas.Pixels[0,0] then
   if CheckImage(i,j) then ShowMessage('Успех!');
  end;
fl.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
jpg1 := TJPEGImage.Create;
jpg2 := TJPEGImage.Create;
BT1:=TBitMap.Create;
BT2:=TBitMap.Create;
end;

function TForm1.CheckImage(h, w: integer): boolean;
var
i,j,mh,mw: integer;
begin
result:=false;
mh:=h+BT2.Height;
if mh>BT1.Height then exit;
mw:=w+BT2.Width;
if mw>BT1.Width then exit;
result:=true;
for i:=h to mh do
 for j:=w to mw do
  begin
   if (BT1.Canvas.Pixels[j,i]<>BT2.Canvas.Pixels[j-w,i-h]) then
    begin
     result:=false;
     exit;
    end;
  end;
end;

Накидал код для поиска картинки в картинке, формат изображения jpg
но вырезал из изображения кусок, но он его почему то не находит хотя в одном и том же изображении находит совпадение, в чем проблема?
Ответить с цитированием
  #2  
Старый 03.03.2013, 17:44
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Код:
procedure TForm1.Timer2Timer(Sender: TObject);
var
fl: TStringList;
i,j: integer;
begin
Timer2.Enabled:=false;
Fl:=TStringList.Create;
Search('C:\**',fl);
jpg1.LoadFromFile('C:\***\test1.jpg');
BT1.Assign(JPG1);
jpg2.LoadFromFile('C:\***\test2.jpg');
BT2.Assign(JPG2);
for i:=0 to BT1.Height - BT2.Height do
 for j:=0 to BT1.Width - BT2.Width do
  begin
   if BT1.Canvas.Pixels[j,i]=BT2.Canvas.Pixels[0,0] then
   if CheckImage(i,j) then ShowMessage('Успех!');
  end;
fl.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
jpg1 := TJPEGImage.Create;
jpg2 := TJPEGImage.Create;
BT1:=TBitMap.Create;
BT2:=TBitMap.Create;
end;

function TForm1.CheckImage(h, w: integer): boolean;
var
i,j,mh,mw: integer;
begin
result:=false;
mh:=h+BT2.Height-1;
mw:=w+BT2.Width-1;
result:=true;
for i:=h to mh do
 for j:=w to mw do
  begin
   if (BT1.Canvas.Pixels[j,i]<>BT2.Canvas.Pixels[j-w,i-h]) then
    begin
     result:=false;
     exit;
    end;
  end;
end;
вроде исправил кое что но код все равно не робит
прикрепил простые картинки по которым проверяю

ловит совпадение в 22,19 и 0,0 пикселей а дальше в 23,19 и 1,0 почему то у него они не равны
Изображения
Тип файла: jpg test1.jpg (813 байт, 23 просмотров)
Тип файла: jpg test2.jpg (631 байт, 22 просмотров)
Ответить с цитированием
  #3  
Старый 03.03.2013, 21:36
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цвета не совпадают. Jpeg всё же жмёт с искажениями, перевёл представленные файлики в битмап и сразу всё заработало.
Ответить с цитированием
  #4  
Старый 03.03.2013, 21:46
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

ну я так то в паинте одинаковым цветом сделал, но все равно оригенал у меня идет только jpg так что надо как то с ним сделать
Ответить с цитированием
  #5  
Старый 03.03.2013, 21:50
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от ALexandr555
..оригенал у меня идет только jpg так что надо как то с ним сделать
С jpg никак, или тогда задавать погрешность в изменении цвета - перепад от такого градиента до такого считать верным.
Ответить с цитированием
  #6  
Старый 03.03.2013, 21:53
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

так, нашел что png могу получить, там сработает?
Ответить с цитированием
  #7  
Старый 03.03.2013, 22:00
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от ALexandr555
...png могу получить, там сработает?
Дык, возьмите, да и поробуйте сохранить в этом формате, вдруг прокатит? Знаю только, что PNG аналог гифа.

З.Ы. Вот это в помощь.

Последний раз редактировалось Alegun, 03.03.2013 в 22:04.
Ответить с цитированием
  #8  
Старый 03.03.2013, 22:25
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Гиф на палитру завязан, пнг 24 битная картинка(+сжатие).
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #9  
Старый 03.03.2013, 23:36
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

8-битный PNG также на палитру завязан. Разница только в том, что при этом он всё же может иметь Альфа канал, а в GIF-е для этого используется "прозрачный" цвет.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 04.03.2013, 23:16
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

а может ли bmp сохраняться с различиями в цвете не большими? а то иногда срабатывает иногда не находит
Ответить с цитированием
  #11  
Старый 04.03.2013, 23:51
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Я бы добавил вывод разницы картинок в процентах.

Смысл ф-ии checkimage? Она дублирует часто кода откуда вызывается и выполняет проверки, которые достаточно один раз выполнить.

И вообще, прчему сравнивается с нулевым пикселем?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 04.03.2013 в 23:57.
Ответить с цитированием
  #12  
Старый 05.03.2013, 07:37
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

что-то похожее
на java есть http://www.sikuli.org/, не знаю насколько работоспособна и можно ли ей управлять через коммандную строку, но по идее использует всякие алгоритмы распознавания
__________________
>woweook<

Последний раз редактировалось Pyro, 05.03.2013 в 07:39.
Ответить с цитированием
  #13  
Старый 05.03.2013, 14:28
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

M.A.D.M.A.N ну я не сравниваю две картинки а ищю в одной другую, так что зачем разница в процентах, я вот проверил кнопка одна на картинке совпадает с образцом на 2937 пикселей из 3036, а не точный поиск похоже емкий будет, тут то я их сравнил сразу, и то ли Fraps сохраняет bmp с различиями такими в пикселях то ли, у источника такое происходит хотя не должно
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:31.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025