突出显示图像之间的差异

2023-11-22

我应该修改这个图像比较代码以突出显示/指出两个图像之间的差异。有没有办法修改此代码以突出显示图像的差异。如果没有任何有关如何进行的建议,将不胜感激。

 int width1 = img1.getWidth(null);
            int width2 = img2.getWidth(null);
            int height1 = img1.getHeight(null);
            int height2 = img2.getHeight(null);
            if ((width1 != width2) || (height1 != height2)) {
                System.err.println("Error: Images dimensions mismatch");
                System.exit(1);
            }
            long diff = 0;
            for (int i = 0; i < height1; i++) {
                for (int j = 0; j < width1; j++) {
                    int rgb1 = img1.getRGB(j, i);
                    int rgb2 = img2.getRGB(j, i);
                    int r1 = (rgb1 >> 16) & 0xff;
                    int g1 = (rgb1 >> 8) & 0xff;
                    int b1 = (rgb1) & 0xff;
                    int r2 = (rgb2 >> 16) & 0xff;
                    int g2 = (rgb2 >> 8) & 0xff;
                    int b2 = (rgb2) & 0xff;
                    diff += Math.abs(r1 - r2);
                    diff += Math.abs(g1 - g2);
                    diff += Math.abs(b1 - b2);
                }
            }
            double n = width1 * height1 * 3;
            double p = diff / n / 255.0;
            return (p * 100.0);

这个解决方案对我有用。它突出了差异,并且在我尝试过的方法中具有最佳性能。 (假设:图像大小相同。此方法尚未使用透明胶片进行测试。)

比较 1600x860 PNG 图像 50 次的平均时间(在同一台机器上):

  • JDK7 ~178 毫秒
  • JDK8 ~139 毫秒

有人有更好/更快的解决方案吗?

public static BufferedImage getDifferenceImage(BufferedImage img1, BufferedImage img2) {
    // convert images to pixel arrays...
    final int w = img1.getWidth(),
            h = img1.getHeight(), 
            highlight = Color.MAGENTA.getRGB();
    final int[] p1 = img1.getRGB(0, 0, w, h, null, 0, w);
    final int[] p2 = img2.getRGB(0, 0, w, h, null, 0, w);
    // compare img1 to img2, pixel by pixel. If different, highlight img1's pixel...
    for (int i = 0; i < p1.length; i++) {
        if (p1[i] != p2[i]) {
            p1[i] = highlight;
        }
    }
    // save img1's pixels to a new BufferedImage, and return it...
    // (May require TYPE_INT_ARGB)
    final BufferedImage out = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
    out.setRGB(0, 0, w, h, p1, 0, w);
    return out;
}

Usage:

import javax.imageio.ImageIO;
import java.io.File;

ImageIO.write(
        getDifferenceImage(
                ImageIO.read(new File("a.png")),
                ImageIO.read(new File("b.png"))),
        "png",
        new File("output.png"));

一些灵感...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

突出显示图像之间的差异 的相关文章

  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • SwiftUI 全屏图像背景

    我想在背景中显示全屏图像 我已经实现了这个 struct LoginView View var body some View VStack Spacer Text Hallo Text Hallo2 Text Hallo2 Text Hal
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • 使用 HTML 而非 CSS 将图像链接居中

    我试图仅使用 HTML 而不使用 CSS 将图像居中 这可能吗 我尝试过以下代码 a href link img src URL align center a 然而图像并没有移动 我该如何解决这个问题 我试图居中的图像是我们的右栏上的捐赠按
  • 无法接受许可协议 Android SDK Platform 24

    尝试在 Cordova 项目上安装 Android 平台时出现以下错误 我一直在遵循这个指南 https cordova apache org docs en latest guide cli 执行以下命令时出现错误 cordova pla
  • Android 后台服务中的位置监听器

    哪种方法更好 直接实施LocationListener像这样 public class BackgroundService extends Service implements LocationListener 或通常声明LocationL
  • 增加 D3 树布局的节点之间的间隙

    如图所示 我试图增加树布局两侧最后一个节点之间的间隙 因为它们重叠 在D3中有什么办法可以实现吗 name type network children name type lb children name type mm id app
  • Firestore:多个“数组包含”

    更新这个问题 Firestore 推出了另一个与 in 查询类似的功能 即 array contains any 查询 此功能允许您同时对多个值执行包含数组的查询 使用 array contains any 运算符通过逻辑 OR 组合同一字
  • Spring 3.2 中发布的新 Spring MVC 测试框架是否测试 web.xml 配置?

    我已阅读文档 http static springsource org spring docs 3 2 x spring framework reference html testing html spring mvc test frame
  • java中的条件变量是什么?

    Q1 Java 中的 condVar 是什么 如果我看到下面的代码 条件变量是否必须位于 互斥体 acquire and 互斥体 release block public void put Object x throws Interrupt
  • 使用 querySelector 查找同级行中包含的下一个单元格

    我正在尝试使用querySelector查找表格下一行中的第一个单元格 因此 从 ROW 1 开始 找到下一个 TR 元素 然后找到该 TR 元素内的第一个子 TD 元素 但是 当我编写 CSS 选择器时 它返回null 我的 CSS 选择
  • 为什么我无法用 C++ 编译 HelloWorld?

    我正在尝试用 C 编译一个简单的 Hello World 程序 但我不断收到以下错误 为什么 gcc o HelloWorldCompiled HelloWorld cc tmp ccvLW1ei o In function main He
  • 是否存在双向多映射持久数据结构?

    换句话说 我们可以在持久数据结构中有效地建模多对多关系吗 建议使用一对单向多重映射 但是 我不确定这如何在持久数据结构中很好地进行删除 让我们以键 1 4 到值 1 4 为例 假设它们各自引用所有其他键 因此我们有两个在两个方向上看起来都非
  • 如何在 CSS 中制作图像的叠加层?

    我正在努力实现这样的目标 当我将鼠标悬停在图像上时 我想在该图像上添加一些文本和图标 这种深色颜色 我被困在这里了 我找到了一些教程 但它们不适用于这种情况 另外 还有一个问题 每个图像都有不同的高度 宽度始终相同 如何才能达到这样的效果呢
  • Django 中的模拟测试在 TestCase 中全部运行时不起作用,但一一运行良好

    在 Django 中测试视图时 我使用 python 模拟来修补一些函数和类 如果我独立运行每个测试 则所有测试都有效 但是当我运行TestCase时 一些测试不起作用 补丁没有效果 class ViewsTest TestCase moc
  • getAttribute 在 IE7 中无法返回类?

    我需要根据随机属性值找到随机节点 为此 我在 getElementsByTagName 的节点上使用 getAtrribute 似乎当我查找类名作为属性时 它在 IE 上不起作用 在 FF 上起作用 有人知道 getAtrribute 是否
  • 将数据传递给 jQuery 事件处理程序

    Scenario 在 GUI 中 用户在文本输入中插入一些文本 然后单击按钮 插入的文本将显示在 div 中 我找到了一个简单的解决方案 演示在这里 即在访问输入元素对象的处理程序内设置输出文本 太糟糕了 相反 我会将输入文本 而不是元素
  • 如何在我的 war 中包含测试类和配置以使用 Maven 进行集成测试?

    我目前有一个 Maven Web 项目 我正在尝试为其编写集成测试 对于项目的结构 我在下面定义了测试存根src 测试 java 而这些存根的 spring bean 定义位于src 测试 资源 我想做的是 当我构建 war 工件时 我希望
  • Laravel 5.1:file_put_contents() 错误中出现 ErrorException,可能没有可用磁盘空间

    这个错误是突然出现的 D xampp htdocs pckg vendor laravel framework src Illuminate Filesystem Filesystem php 第 81 行中的 ErrorException
  • SwingUtilities 中的 invokeAndWait 方法

    请解释 SwingUtilities 中的 invokeAndWait 方法 我无法理解这一点 解释得很清楚 如果您尝试一个示例 将会有很大的帮助 编辑添加 noob对问题的扩展 有什么不清楚的地方this 这是一个修改后的用法示例 imp
  • 应用程序运行时刷新 Java 中的打印机

    正如标题所示 我想在 Java 应用程序运行时刷新在计算机设置中注册的打印机 通常情况下 我可以使用PrinterJob lookupPrintServices 获得打印机 但是 这些仅在重新启动应用程序时才会刷新 我读过一些有关looku
  • 使用 OpenCV 加载 OpenGL 纹理

    我见过很多加载纹理的代码示例OpenGL 其中许多有点难以理解或需要带有大量代码的新功能 我在想 作为OpenCV允许我们加载任何图像格式 它可以是加载纹理的简单有效的方法OpenGL 但我错过了一些东西 我有这段代码c cv Mat te
  • 突出显示图像之间的差异

    我应该修改这个图像比较代码以突出显示 指出两个图像之间的差异 有没有办法修改此代码以突出显示图像的差异 如果没有任何有关如何进行的建议 将不胜感激 int width1 img1 getWidth null int width2 img2