我正在尝试在集成测试中确定两个图像之间的差异.在网上进行了一些研究之后,我偶然发现了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比较图像相关推荐

  1. marvin java_Java开源图像处理框架Marvin介绍

    Java对图像的处理框架比较少,目前比较流行的有Jmagick以及Marvin,但Jmagick只能处理图像(上篇Java清除图片中的恶意信息(利用Jm Java对图像的处理框架比较少,目前比较流行的 ...

  2. marvin java_JAVA使用Marvin在图片中搜索图片

    Java对图像的处理框架比较少,目前比较流行的有Jmagick以及Marvin,但Jmagick只能处理图像(上篇Java清除图片中的恶意信息(利用Jmagick)中对Jmagick已做过简略介绍), ...

  3. 图像的傅里叶变换 java_java使用傅里叶变换,得到变换之后的傅里叶频谱图像。...

    使用傅里叶变换来处理图像,可以滤波,去噪. 但是网络上java实现很少,可以运行的就更少,我总结了一些代码,并加以调试, 保证速度的情况下得以运行成功. 这些代码仅对灰度图验证通过.学习之用. 调用结 ...

  4. word转图片 java_Java MS Word和PDF转换为图像(png / jpg)

    要将PDF转换为图像,可以使用PDFbox 以下是使用pdfbox API将PDF转换为图像的代码 import java.awt.image.BufferedImage; import java.i ...

  5. cropper.js 图像旋转问题_快速提高前端开发效率:10个JavaScript图像处理库

    用JavaScript处理图像可能非常困难且繁琐.幸运的是,有许多库可以使事情变得简单得多.以下就是一些前端开发经常要使用到的图片处理库,和千锋广州前端小编一起来看看吧! 如果发现有用的东西,请尝试将 ...

  6. Marvin java图像处理

    Marvin 是一个Java开发的可扩展的图像处理框架,该框架主要提供以下几方面的功能: 基本图像操作: 从视频中捕获帧: 多线程的图像处理: 通过GUI界面集成插件: 插件性能分析: 通过插件进行功 ...

  7. 56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍...

    0 引言 Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架.该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其 ...

  8. Java 图像处理框架-Marvin

    网上看到,摘录过来的,暂时还没涉足这方面的东西 Marvin 1.4.5 的插件接口支持处理多个图像作为输入,新的插件可通过多个图片来确认背景,新的插件可使用多个图片来合并相同场景. Marvin 是 ...

  9. Marvin ,Java开发图像处理框架

    2019独角兽企业重金招聘Python工程师标准>>> Marvin 是一个Java开发的可扩展的图像处理框架,该框架主要提供以下几方面的功能: 基本图像操作: 从视频中捕获帧: 多 ...

最新文章

  1. ACM的java 傻瓜式教学
  2. 14_clickhouse,kafka引擎,kafka消息到ClickHouse的MergeTree引擎
  3. 区块链和java哪个更难_java 区块链中设计合理的难度系数
  4. 因为我的名字特殊大家都是用异样的眼光在看着我 04
  5. JS基础:求一组数中的最大最小值,以及所在位置
  6. opencv mat数据剪裁感兴趣的部分处理方法
  7. vb.net 弹出对话框 修改按钮名_Microsoft Excel怎么批量快速修改批注?
  8. javascript 询问_JavaScript解释引擎
  9. git log 查看自己修改的行数_Git 笔记 day2
  10. python 递归函数例子
  11. 使用ES6,Pt更好JavaScript。 II:深入学习课堂
  12. Neuralizing Regular Expressions for Slot Filling 神经网络转回自动机
  13. 面向开发者的网站,真的是认真设计过的吗?
  14. 网络攻击机制和技术发展综述
  15. egg项目部署及PM2的使用
  16. 一本书读懂财报 | 资产负债表剖析
  17. vue内使用 cytoscape(数据可视化)
  18. Python3安装PyQt5
  19. 这些排查内存问题的命令,你用过多少?
  20. 计算机基础,了解服务器的硬件组成

热门文章

  1. [146]PyUserInput模拟鼠标和键盘模拟
  2. ng-template、ng-content、ng-container
  3. ::ng-deep 与 :host ::ng-deep
  4. c++在csv写入汉字_python-opencv表格识别转csv
  5. 《管理长歌行》—— 小花狗的错误
  6. 精选汇总 | 开心一刻
  7. 如何设置payjs的微信jsapi支付目录
  8. IVMS-5000海康平台安装
  9. MySQL中的排序与分页
  10. 嵌入式平台ssh开发环境搭建