![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
попиксельное сравнение изображений
borodaj © (2007-05-29 16:10:00)Доброго времени. господа!! подскажите такой вопрос несложный... есть два изображения, необходимо сравнить их попиксельно, и результат о их "схожести" вывести в процентах.... заранее спасибо!
borodaj (2007-05-29 16:57:00) [1]огромное спасибо!!
MBo (2007-05-29 16:46:00) [2]
function CompareBmp24(bmp1, bmp2: TBitmap): Double;
var
i, j, Sum: Integer;
SLine1, SLine2: PByteArray;
begin
Assert((bmp1.PixelFormat = pf24bit) and (bmp2.PixelFormat = pf24bit),
'24bit only!');
Assert((bmp1.Width <> 0) and (bmp1.Height <> 0), 'Empty bitmap!');
if (bmp1.Height <> bmp2.Height) or (bmp1.Width <> bmp2.Width) then
begin
Result := 0;
Exit;
end;
Sum := 0;
for i := 0 to bmp1.Height - 1 do
begin
SLine1 := bmp1.ScanLine[i];
SLine2 := bmp2.ScanLine[i];
for j := 0 to bmp1.Width - 1 do
if (PInteger(@SLine1[j * 3])^ and $FFFFFF00) =
(PInteger(@SLine2[j * 3])^ and $FFFFFF00) then
inc(Sum);
end;
Result := Sum / (bmp1.Width * bmp1.Height);
end;
borodaj (2007-05-29 16:32:00) [3]спасиб огромное... а не завалялось у тебя кода пример (по поводу сравнения)... случайно? ))
MBo (2007-05-29 16:24:00) [4]с процентами проблемы, что ли? ;)
Проходишь в двух вложенных циклах по всем пикселам изображений с помощью ScanLine, например, или с использованием технологии отсюда: http://www.delphimaster.ru/articles/pixels/index.htmlи при совпадении увеличиваешь счетчик.
borodaj (2007-05-29 16:18:00) [5]да, в принципе обе части... :)
MBo (2007-05-29 16:16:00) [6]Какая именно часть задачи вызывает затруднения?