![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Код:
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
|
||||
|
||||
|
Код:
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 почему то у него они не равны |
|
#3
|
||||
|
||||
|
Цвета не совпадают. Jpeg всё же жмёт с искажениями, перевёл представленные файлики в битмап и сразу всё заработало.
|
|
#4
|
||||
|
||||
|
ну я так то в паинте одинаковым цветом сделал, но все равно оригенал у меня идет только jpg так что надо как то с ним сделать
|
|
#5
|
||||
|
||||
|
Цитата:
|
|
#6
|
||||
|
||||
|
так, нашел что png могу получить, там сработает?
|
|
#7
|
||||
|
||||
|
Цитата:
З.Ы. Вот это в помощь. Последний раз редактировалось Alegun, 03.03.2013 в 22:04. |
|
#8
|
||||
|
||||
|
Гиф на палитру завязан, пнг 24 битная картинка(+сжатие).
|
|
#9
|
||||
|
||||
|
8-битный PNG также на палитру завязан. Разница только в том, что при этом он всё же может иметь Альфа канал, а в GIF-е для этого используется "прозрачный" цвет.
|
|
#10
|
||||
|
||||
|
а может ли bmp сохраняться с различиями в цвете не большими? а то иногда срабатывает иногда не находит
|
|
#11
|
||||
|
||||
|
Я бы добавил вывод разницы картинок в процентах.
Смысл ф-ии checkimage? Она дублирует часто кода откуда вызывается и выполняет проверки, которые достаточно один раз выполнить. И вообще, прчему сравнивается с нулевым пикселем? Последний раз редактировалось M.A.D.M.A.N., 04.03.2013 в 23:57. |
|
#12
|
|||
|
|||
|
что-то похожее
на java есть http://www.sikuli.org/, не знаю насколько работоспособна и можно ли ей управлять через коммандную строку, но по идее использует всякие алгоритмы распознавания Последний раз редактировалось Pyro, 05.03.2013 в 07:39. |
|
#13
|
||||
|
||||
|
M.A.D.M.A.N ну я не сравниваю две картинки а ищю в одной другую, так что зачем разница в процентах, я вот проверил кнопка одна на картинке совпадает с образцом на 2937 пикселей из 3036, а не точный поиск похоже емкий будет, тут то я их сравнил сразу, и то ли Fraps сохраняет bmp с различиями такими в пикселях то ли, у источника такое происходит хотя не должно
|