marvin java_java-与MarvinFramework比较图像

我正在尝试在集成测试中确定两个图像之间的差异.在网上进行了一些研究之后,我偶然发现了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对象,则可以获取存储在键合计中的不同像素数.

例:

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对象的方法.

输入:

下面的源代码实现了两个测试用例,一个用例将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选项卡中的输出下方.

标签:image-processing,java,marvinproject

来源: https://codeday.me/bug/20191122/2056048.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值