Java对图像的处理框架比较少,目前比较流行的有Jmagick以及Marvin,但Jmagick只能处理图像(上篇Java清除图片中的恶意信息(利用Jmagick)中对Jmagick已做过简略介绍),而Marvin不但可以处理图像,而且可以集成各种插件,操作视频,摄像头来达到各种效果。

Marvin 是一个Java开发的可扩展的图像处理框架,该框架主要提供以下几方面的功能:

  • 基本图像操作;
  • 从视频中捕获帧;
  • 多线程的图像处理;
  • 通过GUI界面集成插件;
  • 插件性能分析;
  • 通过插件进行功能扩展。

授权协议: GPL

开发语言: Java

操作系统: 跨平台

项目主页: http://marvinproject.sourceforge.net/en/index.html

目前插件提供的效果:

艺术化(马塞克,电视效果)、模糊、纹理、分割、变形、渲染、图案、直方图、边缘检测等等,

具体参考:http://marvinproject.sourceforge.net/en/plugins.html

截个电视效果的图大家看下:

使用方法:

1. 下载MarvinFramework_1.3.1(图像处理框架)和JMF1.2(Java媒体处理框架)

2. 将marvin_1.3.1.jar拷贝到你的lib目录,marvin整个文件夹拷贝到工程根目录,该文件夹包含了各种图片处理插件。

3. 若需要对视频处理,则将JMF1.2解压后的customizer.jar、jmf.jar、multiplayer.jar、mediaplayer.jar拷贝到你的工程lib目录,另外

该框架中还有一个jmf-2_1_1e-windows-i586.exe需要安装,这样才能操作你的摄像头,并释放必要的dll文件。

下面是个简单程序,演示了Marvin加载图片,修改大小后写重新生成图片的过程:

  1. package image;
  2. import marvin.image.MarvinImage;
  3. import marvin.io.MarvinImageIO;
  4. /**
  5. * Created on 2010-7-9
  6. * <p>Description: [Marvin学习]</p>
  7. * @author         shixing_11@sina.com
  8. * @version        1.0
  9. */
  10. public class MarvinTest
  11. {
  12. /**
  13. * Created on 2010-7-9
  14. * <p>Discription:[main]</p>
  15. * @param args
  16. * @author:[shixing_11@sina.com]
  17. */
  18. public static void main(String[] args)
  19. {
  20. String srcFile = "c://img//b.jpg";     //源文件
  21. String dstFile = "c://img//bb.jpg";    //处理后的文件
  22. MarvinImage image = MarvinImageIO.loadImage(srcFile);  //装载图像
  23. MarvinImage backupImage = image.clone();  //克隆图像,确保对原图不做修改
  24. backupImage.resize(800, 600);   //设置新宽度和高度
  25. MarvinImageIO.saveImage(backupImage, dstFile);   //保存图像
  26. }
  27. }
  1. package image;
  2. import marvin.image.MarvinImage;
  3. import marvin.io.MarvinImageIO;
  4. /**
  5. * Created on 2010-7-9
  6. * <p>Description: [Marvin学习]</p>
  7. * @author         shixing_11@sina.com
  8. * @version        1.0
  9. */
  10. public class MarvinTest
  11. {
  12. /**
  13. * Created on 2010-7-9
  14. * <p>Discription:[main]</p>
  15. * @param args
  16. * @author:[shixing_11@sina.com]
  17. */
  18. public static void main(String[] args)
  19. {
  20. String srcFile = "c://img//b.jpg";     //源文件
  21. String dstFile = "c://img//bb.jpg";    //处理后的文件
  22. MarvinImage image = MarvinImageIO.loadImage(srcFile);  //装载图像
  23. MarvinImage backupImage = image.clone();  //克隆图像,确保对原图不做修改
  24. backupImage.resize(800, 600);   //设置新宽度和高度
  25. MarvinImageIO.saveImage(backupImage, dstFile);   //保存图像
  26. }
  27. }

可见Marvin的图片管理是通过类MarvinImageIO来完成的。

具体API参考:http://marvinproject.sourceforge.net/javadoc/

Marvin是一个Java开源图像处理框架
项目地址

使用非常简单,按照tutorials一步一步就知道怎么部署代码。

依赖只需要添加marvin/framework/marvin_1.5.5.jar到classpath。

例子:

import marvin.image.MarvinImage;
import marvin.image.MarvinSegment;
import marvin.io.MarvinImageIO; import java.awt.*;
import java.io.File; import static marvin.MarvinPluginCollection.*; public class Subimage {
public Subimage(){
MarvinImage window = MarvinImageIO.loadImage("E:\\msC_desktop\\batlogo.jpg");
MarvinImage eclipse = MarvinImageIO.loadImage("E:\\msC_desktop\\wxlogo.jpg"); MarvinSegment seg1; int startx = 500, starty = 0;
seg1 = findSubimage(eclipse, window, startx, starty, 0.75);
if(seg1 != null){
System.out.println("Found:" + seg1.x1 + " " + seg1.y1 + " width:"+ (seg1.x2-seg1.x1) + " height:"+(seg1.y2-seg1.y1) );
drawRect(window, seg1.x1, seg1.y1, seg1.x2-seg1.x1, seg1.y2-seg1.y1);
MarvinImageIO.saveImage(window, "E:\\msC_desktop\\window_out.png");
}else{
System.out.println("NOT FOUND");
} }
private void drawRect(MarvinImage image, int x, int y, int width, int height){
x-=4; y-=4; width+=8; height+=8;
image.drawRect(x, y, width, height, Color.red);
}
public static void main(String[] args) {
new Subimage();
}
}

JAVA使用Marvin在图片中搜索图片的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. Java 图像处理框架-Marvin

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

  3. Java Script 编码规范【转】

    Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript ...

  4. Java生成随机验证码

    package com.tg.snail.core.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphic ...

  5. JAVA课程设计——“小羊吃蓝莓”小游戏

    JAVA课程设计--"小羊吃蓝莓"小游戏 1. 团队课程设计博客链接 http://www.cnblogs.com/HXY071/p/7061216.html 2. 个人负责模块或 ...

  6. Java版2048

    功能要求:2048的基本界面,能够实现2048的游戏功能. 总思路:两个类:Game和GameListener. Game负责界面的实现和paint方法的重写 GameListener负责实现键盘和鼠 ...

  7. 201621123050 《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 答:接口.has-a.comparable 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. ...

  8. Java+opencv实现人脸检测

    版本 Java1.8 opencv3.4 代码: import java.awt.Graphics; import java.awt.image.BufferedImage; import javax ...

  9. atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本

    atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本 1. 去除边框思路原理 1 2. Thumbnailator 是一个用来生成图像缩略图.裁切. ...

随机推荐

  1. dede列表页调用

    {dede:list pagesize ='16'} <li class="item pull-left"> <a class="item-wrap&q ...

  2. Laravel中使用自己的类库三种方式

    虽然Composer使得我们可以重用很多现有的类库(例如packagist.org中的),但是我们仍然可能用到一些不兼容composer的包或者类库.另外在某一项目中,我们也可能会创建某一类库,而且可 ...

  3. android4.0后无法向Servlet发送请求解决办法

    从4.0开始,强制性地规定网络堵塞任务都不能放在ui线程,不然直接报错. 个办法,在oncreate下面加入 StrictMode.setThreadPolicy(new StrictMode.Thr ...

  4. C语言——第零次作业

    A:你对网络专业或计算机专业了解是怎样? 据我所知计算机专业未来前景不错,不仅就业路子广,毕业工资高,而且在全世界都很吃香.但是,计算机专业是一个非常难学的专业,尽管人们追趋逐耆也没有填补计算机高端人 ...

  5. Java编程的逻辑 (71) - 显式锁

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  6. stm32+ESP8266AT指令详细说明

    最近公司团队的项目用到ESP8266,使用的是stm32c8t6芯片,软件使用MDK,于是写下调试过程中的一些注意点.具体代码和涉及思路不能外泄,这里只给出我们调试过程中的注意的方面. 关于ESP82 ...

  7. python django查询一周,一月,一年时间

    首先是当前时间的确定,对于年月日,orm模型都有对应的方法直接查询,周是没有方法直接查询的,我是没有找到这个方法,只能间接的查询 1 2 3 now_time = datetime.datetime. ...

  8. 001.Git简介与安装

    一 git介绍 1.1 概述 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放 ...

  9. SpringMVC框架07——服务器端JSR303数据校验

    1.数据校验概述 数据校验分为客户端校验和服务器端校验,客户端主要是通过过滤正常用户的误操作,是第一道防线,一般使用JavaScript代码实现.但是只有客户端校验是不够的,攻击者可以绕过客户端验证直 ...

  10. jquery multi-select 实例demo

    运行效果: 其他的不多说了,都是用的jquery.multiSelect.js组件实现的,直接看代码吧 代码下载地址: http://download.csdn.net/detail/ajavabir ...