gpt4 book ai didi

java - 将图像与 MarvinFramework 进行比较

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:48:54 25 4
gpt4 key购买 nike

我试图在集成测试期间确定两个图像之间的差异。在网上做了一些研究后,我偶然发现了 the MarvinProject并尝试用它创建一个 UnitTest,见下文。

据我了解插件 DifferentRegions,它将用包含差异的区域填充传递的 ImageMask differenceMask。我通过测试的两张图片确实不同,所以它应该打印出一些东西。

不幸的是,它没有。

我已经编写了其他测试来按字节比较这两个图像并且成功了。对于那些想尝试这个问题的人,我创建了 a repository on GitHub这是the ImageCompareTest .

@Test
public void tryMarvinProject() {
// init images
String root = "src/test/resources/";
MarvinImage assertedImg = MarvinImageIO.loadImage(root + "image1.bmp");
MarvinImage actualImg = MarvinImageIO.loadImage(root + "image2.bmp");

// init diff-regions plugin
DifferentRegions regions = new DifferentRegions();
regions.load();
regions.setAttribute("comparisonImage", assertedImg);

int width = assertedImg.getWidth();
int height = assertedImg.getHeight();
int type = assertedImg.getType();

// process the images and retrieve differences from the ImageMask
MarvinImageMask differenceMask = new MarvinImageMask();
regions.process(
actualImg,
new MarvinImage(new BufferedImage(width, height, type)),
new MarvinAttributes(),
differenceMask,
false);

// should contain the differences, but does not
System.out.println(differenceMask.getMaskArray());
assertNotNull(differenceMask.getMaskArray());
}

最佳答案

插件 DifferentRegions 是为实时视频处理而开发的。我们的想法是找到场景中在一系列视频帧中发生变化的区域,如 Example 所示。

对于图像到图像的比较,您应该尝试 DifferenceColor插入。基本上,它比较两幅图像,分析同一位置像素的颜色强度。如果两个给定像素的差异高于属性 colorRange,则认为这两个像素的颜色不同。该插件以不同的颜色渲染不同的像素,以在输出图像中显示它们。如果在process(...) 方法中传递一个MarvinAttributes 对象,您可以获得不同像素的数量,存储在total 键中>.

示例:

    MarvinAttributes attrOut = new MarvinAttributes();
MarvinImagePlugin diff = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.difference.differenceColor");
diff.process(imageA, imageB, attrOut);
System.out.println("Distinct pixels:"+attrOut.get("total"));

PS:为了使用MarvinPluginLoader,您必须按照提供的说明配置开发环境here .


但是,由于您正在尝试使用图像比较进行单元测试,因此您应该看一下 MarvinTestCase 类。它扩展了 JUnit TestCase 并提供方法来比较 MarvinImage 对象。

输入:

enter image description here

下面的源代码实现了两个测试用例,一个比较 imageA 和 imageB,另一个比较 imageA 和 imageC。

import marvin.image.MarvinImage;
import marvin.io.MarvinImageIO;
import marvin.test.MarvinTestCase;

public class UnitTesting extends MarvinTestCase {

private MarvinImage imageA, imageB, imageC;

public UnitTesting(){
imageA = MarvinImageIO.loadImage("./res/penguin.jpg");
imageB = MarvinImageIO.loadImage("./res/penguin.jpg");
imageC = MarvinImageIO.loadImage("./res/penguin_dark.jpg");
}

public void testSameImage(){
assertEquals(imageA, imageB);
}

public void testDistinctImages(){
assertEquals(imageA, imageC);
}
}

使用 Eclipse 或其他 IDE,将上面的类作为 JUnit 测试运行。在 Eclipse 上的 JUnit 选项卡中的输出下方。

enter image description here

关于java - 将图像与 MarvinFramework 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22411041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com