0

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

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 开发人员,所以我向你们寻求帮助。我只需要比较两个图像和是或否。所以这很容易。我也看到了这一点,但无法理解。

在php中比较2张图片

谢谢。

4

1 回答 1

1

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

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

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

如果您要比较两个应该相等但不相等的图像(例如,两个监控摄像头框架),您可以使用下面给出的 DIY 方法。

如果色调和亮度出现失真(例如噪点),那么 DIY 方法将不起作用,但 ImageMagick 会产生良好的效果。

最后,如果您尝试映射同一对象的两个视图,例如从将一只脚向左平移的相机,或者您正在寻找另一个“内部”的图像等,那么 OpenCV 是唯一可行的替代方案他们三个。

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

此时,您可以使用逐像素比较两个图像getColorAt(也可以选择转换为灰度以忽略色调差异)。两个像素之间的距离也可以通过多种方式计算(例如使用CIE 感知函数),或者您可以使用欧几里得距离 - SQRT((r1-r2)* 2 + (g1-g2) *2 + (b1-b2 )**2)。

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

这可以很容易地告诉您图像与在其上绘制了一些线条的同一图像之间的区别。如果您扭曲图像(例如使用“捏合”滤镜)或稍微旋转它,生成的图像将出现 95%,甚至 99% 相同,但该算法很可能会报告非常低的匹配(对于照片质量的图片, 连续的音调,匹配还是不错的。对于卡通,它会很差)。

于 2012-11-21T00:37:37.437 回答