有没有办法在 Delphi 中比较 2 个相似的图像(不相同)。
以下是一些示例:
&
很明显,我们不能逐像素比较, 所以我的想法是对每个图像的像素值求和,然后比较它们:
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 个图像执行此过程,它总是会给我错误的结果。
还有什么办法吗?比如改变颜色或对比度等。
这里有关于您拥有的选项的好文章:https://stackoverflow.com/a/844113/7735这需要一些背景知识,并且最佳性能的解决方案很难从头开始实施,因此使用某种库会是最简单的。这是 Delphi 的 OpenCV 包装器:https://github.com/Laex/Delphi-OpenCV
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;
结束;
就我而言,比较大小就足够了,但如果您需要逐个读取字符,请参阅完整分析