当前位置: 首页 > news >正文

【工具】Java计算图片相似度

【工具】Java图片相似度匹配工具

方案一

通过像素点去匹配

/*** * @param file1Url   图片url* @param file2Url   图片url* @return*/public static double img相似度Url(String file1Url, String file2Url){InputStream inputStream1 = HttpUtil.createGet(file1Url).execute().bodyStream();InputStream inputStream2 = HttpUtil.createGet(file2Url).execute().bodyStream();BufferedImage image1 = ImgUtil.read(inputStream1);BufferedImage image2 = ImgUtil.read(inputStream2);try {inputStream1.close();} catch (IOException e) {e.printStackTrace();}try {inputStream2.close();} catch (IOException e) {e.printStackTrace();}
//
//        String Base641 = Base64.encode(inputStream1);
//        String Base642 = Base64.encode(inputStream2);
//
//
//        if(StrUtil.equals(Base641, Base642)){
//            return 100;
//        }return WTool.img相似度(image1, image2);}/*** 必须宽高一样* 通过像素点逐个去比对* @param file1* @param file2* @return*/public static double img相似度(BufferedImage file1, BufferedImage file2){int aheight = file1.getHeight();int awidth = file1.getWidth();int bHeight = file2.getHeight();int bWidth = file2.getWidth();if(aheight != bHeight){System.out.println("高度不同");System.out.println(aheight);System.out.println(bHeight);return 0;}if(awidth != bWidth){System.out.println("宽度不同");System.out.println(awidth);System.out.println(bWidth);return 0;}int 不相同点 = 0;int sum = aheight * bWidth;for (int i = 0; i < aheight; i++) {for (int i1 = 0; i1 < bWidth; i1++) {int rgba = file1.getRGB(i1, i);int rgbb = file2.getRGB(i1, i);if(rgba != rgbb){不相同点++;}}}BigDecimal 不相同点Big  = new BigDecimal(不相同点);BigDecimal sumBig  = new BigDecimal(sum);BigDecimal big100  = new BigDecimal(100);BigDecimal 相似度Big = big100.subtract(不相同点Big.divide(sumBig, MathContext.DECIMAL32).multiply(new BigDecimal(100)));int 相似度 = 相似度Big.intValue();log.info("共:{}, 不相同点:{}, 相似度:{}%", sum, 不相同点, 相似度);file1.flush();file2.flush();return 相似度Big.doubleValue();}

依赖

        <!--hutool工具集--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.22</version></dependency>

加强优化方案

1 加载两张待比较的图片;
2 将图片转换为灰度图像;
3 对灰度图像进行降噪处理;
4 提取图像特征,例如使用SIFT算法提取关键点和描述子;
4 计算图像相似度,比较两张图片的特征数据;
5 根据相似度的结果进行判断,确定两张图片是否相似。

其他方案

一个常用的库是OpenCV(Open Source Computer Vision Library)

http://www.lryc.cn/news/228090.html

相关文章:

  • GDB调试
  • swift和OC混编报错问题
  • 第七章 块为结构建模 P5|系统建模语言SysML实用指南学习
  • java算法学习索引之动态规划
  • ChatGPT重磅升级 奢侈品VERTU推出双模型AI手机
  • mac配置双网卡 mac同时使用内网和外网
  • 深度探究深度学习常见数据类型INT8 FP32 FP16的区别即优缺点
  • C++——const成员
  • 使用阿里云服务器学习Docker
  • 通信原理板块——线性分组码之汉明码
  • Hive 常用存储、压缩格式
  • 搞懂它,就可以把结构体玩活了~
  • 基于SpringBoot+Redis的前后端分离外卖项目-苍穹外卖(四)
  • dcat admin 各种问题
  • 数据结构与算法(二)动态规划(Java)
  • 颜值实力“C位出道”:起亚EV6综合实力究竟怎么样?
  • 继承和多态_Java零基础手把手保姆级教程(超详细)
  • AI:85-基于深度学习的自然场景生成与渲染
  • Windows电脑训练 RT-DETR 改进算法 (Ultralytics) 教程,改进RTDETR算法(包括使用训练、验证、推理教程)
  • flask框架报错解决方法
  • Ubuntu18.04 安装docker教程
  • 深入理解Git
  • Leetcode_203.移除链表元素—C语言
  • 虹科方案 | 汽车电子电气架构设计仿真解决方案
  • Java6种单例模式写法
  • Direct3D拾取
  • 大洋钻探系列之二IODP 342航次是干什么的?(上)
  • 离散时间系统模型
  • Nginx学习(在 Docker 中使用 Nginx)
  • 【Java】集合(一)单列集合List