Delphi 比较 2 个相似图像

问题描述 投票:0回答:2

有没有办法在 Delphi 中比较 2 个相似的图像(不相同)。

以下是一些示例:

enter image description here&enter image description here

很明显,我们不能逐像素比较, 所以我的想法是对每个图像的像素值求和,然后比较它们:

function CalcPix( img : TImage) : longint;
var
  s : longint;
  i, j : integer;
begin
  s := 0;

  for i := 0 to img.Height do
  begin
     for j := 0 to img.Width do
     begin
      if img.Canvas.Pixels[i,j] <> clWhite then
        s := s + img.Canvas.Pixels[i, j];
     end;
  end;

  Result := S;
end;

结果是:

1)14836072057

2)16750850318

如您所见,它们并不是那么接近,如果我一次使用 4 - 5 个图像执行此过程,它总是会给我错误的结果。

还有什么办法吗?比如改变颜色或对比度等。

image delphi compare computer-vision
2个回答
6
投票

这里有关于您拥有的选项的好文章:https://stackoverflow.com/a/844113/7735这需要一些背景知识,并且最佳性能的解决方案很难从头开始实施,因此使用某种库会是最简单的。这是 Delphi 的 OpenCV 包装器:https://github.com/Laex/Delphi-OpenCV


0
投票
function TForm1.ComparaImagens(Imagem1, Imagem2: TImage): boolean;
var
  memImg1, memImg2: TStream;
begin
  memImg1 := TMemoryStream.Create;
  memImg2 := TMemoryStream.Create;
  
  Imagem1.Bitmap.SaveToStream(memImg1);
  Imagem2.Bitmap.SaveToStream(memImg2);
  
  Result := (memImg1.Size = memImg2.Size);
  
  memImg1.DisposeOf;
  memImg2.DisposeOf;

结束;

就我而言,比较大小就足够了,但如果您需要逐个读取字符,请参阅完整分析

© www.soinside.com 2019 - 2024. All rights reserved.