zoukankan      html  css  js  c++  java
  • JAVA使用Marvin在图片中搜索图片

    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加载图片,修改大小后写重新生成图片的过程:

    [java:nogutter] view plaincopyprint?
    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. }  
    Java代码
    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 + " "+ (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();
        }
    } 
  • 相关阅读:
    这是一篇通过open live writer发布的博文
    网卡重启失败
    2020年1月目标
    二、安装docker
    JS中的数据类型,包含ES6,set和map等等
    关于prototype和__proto__,最好的一些解释
    JS中call,apply和bind方法的区别和使用场景
    ThinkPHP5生成word文档代码库
    js/jquery操作iframe
    PHP技术--思维导图
  • 原文地址:https://www.cnblogs.com/interdrp/p/7655019.html
Copyright © 2011-2022 走看看