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
marvin java_java-与MarvinFramework比较图像相关推荐
- marvin java_Java开源图像处理框架Marvin介绍
Java对图像的处理框架比较少,目前比较流行的有Jmagick以及Marvin,但Jmagick只能处理图像(上篇Java清除图片中的恶意信息(利用Jm Java对图像的处理框架比较少,目前比较流行的 ...
- marvin java_JAVA使用Marvin在图片中搜索图片
Java对图像的处理框架比较少,目前比较流行的有Jmagick以及Marvin,但Jmagick只能处理图像(上篇Java清除图片中的恶意信息(利用Jmagick)中对Jmagick已做过简略介绍), ...
- 图像的傅里叶变换 java_java使用傅里叶变换,得到变换之后的傅里叶频谱图像。...
使用傅里叶变换来处理图像,可以滤波,去噪. 但是网络上java实现很少,可以运行的就更少,我总结了一些代码,并加以调试, 保证速度的情况下得以运行成功. 这些代码仅对灰度图验证通过.学习之用. 调用结 ...
- word转图片 java_Java MS Word和PDF转换为图像(png / jpg)
要将PDF转换为图像,可以使用PDFbox 以下是使用pdfbox API将PDF转换为图像的代码 import java.awt.image.BufferedImage; import java.i ...
- cropper.js 图像旋转问题_快速提高前端开发效率:10个JavaScript图像处理库
用JavaScript处理图像可能非常困难且繁琐.幸运的是,有许多库可以使事情变得简单得多.以下就是一些前端开发经常要使用到的图片处理库,和千锋广州前端小编一起来看看吧! 如果发现有用的东西,请尝试将 ...
- Marvin java图像处理
Marvin 是一个Java开发的可扩展的图像处理框架,该框架主要提供以下几方面的功能: 基本图像操作: 从视频中捕获帧: 多线程的图像处理: 通过GUI界面集成插件: 插件性能分析: 通过插件进行功 ...
- 56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍...
0 引言 Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架.该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其 ...
- Java 图像处理框架-Marvin
网上看到,摘录过来的,暂时还没涉足这方面的东西 Marvin 1.4.5 的插件接口支持处理多个图像作为输入,新的插件可通过多个图片来确认背景,新的插件可使用多个图片来合并相同场景. Marvin 是 ...
- Marvin ,Java开发图像处理框架
2019独角兽企业重金招聘Python工程师标准>>> Marvin 是一个Java开发的可扩展的图像处理框架,该框架主要提供以下几方面的功能: 基本图像操作: 从视频中捕获帧: 多 ...
最新文章
- ACM的java 傻瓜式教学
- 14_clickhouse,kafka引擎,kafka消息到ClickHouse的MergeTree引擎
- 区块链和java哪个更难_java 区块链中设计合理的难度系数
- 因为我的名字特殊大家都是用异样的眼光在看着我 04
- JS基础:求一组数中的最大最小值,以及所在位置
- opencv mat数据剪裁感兴趣的部分处理方法
- vb.net 弹出对话框 修改按钮名_Microsoft Excel怎么批量快速修改批注?
- javascript 询问_JavaScript解释引擎
- git log 查看自己修改的行数_Git 笔记 day2
- python 递归函数例子
- 使用ES6,Pt更好JavaScript。 II:深入学习课堂
- Neuralizing Regular Expressions for Slot Filling 神经网络转回自动机
- 面向开发者的网站,真的是认真设计过的吗?
- 网络攻击机制和技术发展综述
- egg项目部署及PM2的使用
- 一本书读懂财报 | 资产负债表剖析
- vue内使用 cytoscape(数据可视化)
- Python3安装PyQt5
- 这些排查内存问题的命令,你用过多少?
- 计算机基础,了解服务器的硬件组成