比较PHP中的两个图像

时间:2012-11-21 00:17:51

标签: php

我想在PHP中比较两个图像。如果它们是95%或更高相似,那么结果应该只是显示文本是。如果它们不相似,结果应为否。 所以

if ( ) 
{
echo "Yes";
}
else
{
echo "No";
}

到目前为止,这是我找到的任何方式。 http://pastebin.com/wgeu2DqE 我想在你找到它的地方给你,但你必须注册。

现在我有了加载图像的功能

function LoadPNG($imgname)
{
    /* Attempt to open */
    $im = @imagecreatefrompng($imgname);

    /* See if it failed */
    if(!$im)
    {
        /* Create a blank image */
        $im  = imagecreatetruecolor(150, 30);
        $bgc = imagecolorallocate($im, 255, 255, 255);
        $tc  = imagecolorallocate($im, 0, 0, 0);

        imagefilledrectangle($im, 0, 0, 150, 30, $bgc);

        /* Output an error message */
        imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
    }

    return $im;
}

我一直在尝试用我的记事本++和phpdesigner来提出一些东西,但是我得到了错误。我不是一个php开发者,所以我向你们寻求帮助。我只需要比较两个图像和是或否。所以这很容易。我也看到了这一点但却无法理解。

Compare 2 images in php

感谢。

1 个答案:

答案 0 :(得分:1)

您可以通过多种方式进行比较,具体取决于您想要的比较类型和用例。 “相似”是一个非常模糊的术语。

有图像比较库,或者您可以使用ImageMagick功能。甚至还有OpenCV与PHP一起使用的绑定。

当然,方法越复杂,结果越灵活,越好。

如果您要比较两张应该相等且不相同的图像(例如,两个监视相框),您可以使用下面给出的DIY方法。

如果色调和光度(例如噪音)出现扭曲,那么DIY方法将无效,但ImageMagick会产生良好的效果。

最后,如果您尝试映射同一对象的两个视图,例如从一个向左平移一只脚的相机,或者你正在寻找一个“内部”另一个等的图像,然后OpenCV是这三个中唯一可行的选择。

对于最简单的情况,自己动手的方法可能是首先检查两个图像的宽高比,然后将两者缩小到相同的大小(您可以进一步减少它们) (比如,比例1:4)来过滤掉小的差异和/或减少前面的工作。

此时,您可以使用getColorAt逐个像素地比较两个图像(并且还可以选择转换为灰度以忽略色调的差异)。两个像素之间的距离也可以用几种方式计算(例如用CIE perceptual functions),或者你可以使用欧几里德距离 - SQRT((r1-r2)* 2 +(g1-g2) * 2 +(b1-b2)** 2)。

距离范围为0到W * H * 255 * SQRT(3);您可以将这些值线性映射到0-100%的范围。

这可以很容易地告诉您图像与相同图像之间的差异,并在其上绘制一些线条。如果您扭曲图像(例如使用“捏合”滤镜),或稍微旋转一下,生成的图像将显示95%,甚至99%相同,但此算法可以很好地报告非常低的匹配(对于照片质量图片,连续的音调,匹配仍然是好的。对于漫画,它将是非常差的。)