java-与MarvinFramework比较图像
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-与MarvinFramework比较图像,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2872字,纯文字阅读大概需要5分钟。
内容图文
![java-与MarvinFramework比较图像](/upload/InfoBanner/zyjiaocheng/660/634b7fe412ff465a968c063381540a6f.jpg)
我正在尝试在集成测试中确定两个图像之间的差异.在网上进行了一些研究之后,我偶然发现了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选项卡中的输出下方.
内容总结
以上是互联网集市为您收集整理的java-与MarvinFramework比较图像全部内容,希望文章能够帮你解决java-与MarvinFramework比较图像所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。