首页 > 编程语言 >php计算两张照片的相似度,范围:0-100

php计算两张照片的相似度,范围:0-100

时间:2024-07-12 20:30:14浏览次数:8  
标签:两张 diffPixels 0xFF image2 100 php image1 图片

可以是本地图片也可以是网络图片

需要gd库

/**

* 计算图片相似度

* @param $imagePath1 string 图片路径1

* @param $imagePath2 string 图片路径2

* @return float|int 0(完全两张图片)-100(两张一模一样的图片)

*/

function calculateImageSimilarity($imagePath1, $imagePath2)

{
// 加载图片1

$image1 = imagecreatefromstring(file_get_contents($imagePath1));

if (!$image1) {
echo "image1加载失败\n";

return 0; // 加载失败,相似度为 0

}

// 加载图片2

$image2 = imagecreatefromstring(file_get_contents($imagePath2));

if (!$image2) {
echo "image2加载失败\n";

imagedestroy($image1);

return 0; // 加载失败,相似度为 0

}

// 获取图片尺寸

$width1 = imagesx($image1);

$height1 = imagesy($image1);

$width2 = imagesx($image2);

$height2 = imagesy($image2);

// 确保两张图片尺寸一致

if ($width1 != $width2 || $height1 != $height2) {
echo "图片尺寸不一致\n";

imagedestroy($image1);

imagedestroy($image2);

return 0; // 尺寸不一致,相似度为 0

}

// 获取图片1的像素总数

$totalPixels = $width1 * $height1;

var_export("totalPixels:" . $totalPixels . "\n");

// 计算差异像素数

$diffPixels = 0;

for ($x = 0; $x < $width1; $x++) {
for ($y = 0; $y < $height1; $y++) {
$rgb1 = imagecolorat($image1, $x, $y);

$rgb2 = imagecolorat($image2, $x, $y);

// 比较 RGB 值

$r1 = ($rgb1 >> 16) & 0xFF;

$g1 = ($rgb1 >> 8) & 0xFF;

$b1 = $rgb1 & 0xFF;

$r2 = ($rgb2 >> 16) & 0xFF;

$g2 = ($rgb2 >> 8) & 0xFF;

$b2 = $rgb2 & 0xFF;

// 比较 RGB 值的差异

$diffPixels += abs($r1 - $r2) + abs($g1 - $g2) + abs($b1 - $b2);

}

}

// 将差异归一化到0-255范围内

$diffPixels /= 3;

// 计算相似度

$similarity = max(0, min(100, 100 - ($diffPixels / ($totalPixels * 255) * 100)));

var_export("diffPixels:" . $diffPixels . "\n");

// 释放图片资源

imagedestroy($image1);

imagedestroy($image2);

return $similarity;

}

 

标签:两张,diffPixels,0xFF,image2,100,php,image1,图片
From: https://www.cnblogs.com/shuinanxun/p/18299333

相关文章

  • php:访问/tmp文件夹中文件会报错:file does not exist
    一,php访问/tmp文件夹中文件会报错:代码:$filePath="/tmp/php-temp/keji.jpeg";$is_ex=file_exists($filePath);//print_r("is_ex:".$is_ex);if($is_ex){echo"文件".$filePath.&......
  • 基于PCIe总线架构的2路1GSPS AD、4路1GSPS DA信号处理平台(100%国产化)
     板卡概述       PCIE723-165是基于PCIE总线架构的2通道1GSPS采样率14位分辨率、4通道1GSPS采样率16位分辨率信号处理平台,该板卡采用国产16nmFPGA作为实时处理器,支持2路高速采集以及4路高速数据回放,板载2组DDR4SDRAM大容量数据缓存,板卡支持PCIEGEN3x8主机接口,通过D......
  • php实名认证示例、实人认证接口
    随着互联网的高速发展,人们可以发表言论的渠道越来越多。网络平台不断汲取各地、各人、各时发表的各种信息。人们喜欢将信息发布到微博、知乎、天涯、豆瓣等等网络平台,逐步的,网络信息进入大爆炸时代。这些大量涌现的信息中难免掺杂着一些不良信息,比如:虚假信息、污言秽语、违法......
  • 一类账户认证API在Java、Python、PHP中的使用教程
    随着金融科技的快速发展,一类账户认证在金融服务中扮演着越来越重要的角色。对于个人和企业而言,拥有一个高级别的账户不仅能提高交易效率,还能享受到更多优惠和服务。然而,这也带来了账户安全的挑战和风险。为了确保账户的真实性和合法性,一类账户认证应运而生。它通过对用户......
  • 生成式 AI 的新引擎:探索 Amazon EC2 P5 实例与 NVIDIA H100 GPU 的结合
    欢迎来到雲闪世界。人工智能(AI)和机器学习(ML)正以前所未有的速度改变我们的世界。为  欢迎来到雲闪世界。了支持这些技术的进步,计算能力的需求也在不断增加。2023年3月,AWS和NVIDIA宣布了一项深度合作,重点是构建最具可扩展性的按需AI基础设施,专为训练日益复杂的大型语言模型(LLM......
  • 572、基于51单片机的温度检测(3路,PT100,TLC1543)
    完整资料或定制滴滴我(有偿)见文末。目录一、设计功能二、Proteus仿真三、原理图四、程序源码五、资料包括一、设计功能二、Proteus仿真三、原理图四、程序源码五、资料包括需要完整的资料可以点击下面的名片,找我要资源压缩包的百度网盘下......
  • 1004 Counting Leaves(dfs):邻接表版:写的太多了
    Afamilyhierarchyisusuallypresentedbyapedigreetree.Yourjobistocountthosefamilymemberswhohavenochild.InputSpecification:Eachinputfilecontainsonetestcase.Eachcasestartswithalinecontaining0<N<100,thenumberofnode......
  • 入门PHP就来我这(高级)23 ~ Session
    有胆量你就来跟着路老师卷起来! --纯干货,技术知识分享路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。 上一篇我们完成了cookie的7天免登录功能的实现,本文接着说‘Cookie与Session’这块的Session管理部分。 Session管理 对比Cookie和......
  • PHP请求示例商品详情数据(属性规格sku详情图等)示例,json格式
    在PHP中请求商品详情数据(包括属性、规格、SKU详情、图片等)通常涉及向一个API发送HTTP请求,然后解析返回的JSON格式数据。以下是一个示例流程,包括如何发送请求和如何处理返回的JSON数据。1.发送HTTPGET请求首先,你需要知道API的URL,以及是否需要任何认证(如API密钥、OAuth令牌等......
  • PHP实现断点续传
    解释业务上要求对资源文件进行加密,遂实现通过php接口调用,修改header头,传输流的方式。测试中,在苹果手机上,如果文件过大(大概10M以上),会主动调用多次接口。此时如果不使用断点续传的方式,会导致资源无法加载。苹果设备对于HTTPRange请求的处理可能会更加严格和敏感。它可能更倾......