Java 照片对比功能的实现

package com.function;

import java.awt.image.BufferedImage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
import javax.imageio.ImageIO;

/*
 * 这个是一个照片比对功能实现类
 */
public class Tools_PhotoMatching {
 public int mactching(String contrast_photo ,String test_photo) {
  int contras_rgb[] = new int[3];
  int test_rgb[] = new int[3];
  int k = 0;
  File contrastfile = new File(contrast_photo); //对比照片路径
  File testfile = new File(test_photo); //测试照片路径
  BufferedImage contrasphoto = null;
  BufferedImage testphoto = null;
  try {
   contrasphoto = ImageIO.read(contrastfile);
   testphoto = ImageIO.read(testfile);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  int contraswidth = contrasphoto.getWidth();
  int contrasheight = contrasphoto.getHeight();
  int testwidth = testphoto.getWidth();
  int testheight = testphoto.getHeight();
  //File file = new File("C:\\Users\\prize\\Desktop\\TOOLS\\DCIM\\Camera\\log.txt");
  //File file1 = new File("C:\\Users\\prize\\Desktop\\TOOLS\\DCIM\\Camera\\log1.txt");
  try {
   //FileWriter fileWriter = new FileWriter(file);
   //FileWriter fileWriter1 = new FileWriter(file1);
   //BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
   //BufferedWriter bufferedWriter2 = new BufferedWriter(fileWriter1);
  for (int i = 0; i < testwidth; i++) {
   for (int j = 0; j < testheight; j++) {
    //StringBuffer astringBuffer1 = new StringBuffer();
    //StringBuffer bstringBuffer1 = new StringBuffer();
    int pixel1 = contrasphoto.getRGB(i, j);
    int pixle2= testphoto.getRGB(i, j);
    contras_rgb[0] = (pixel1 & 0xff0000) >> 16; //将值转化成16进制
    contras_rgb[1] = (pixel1 & 0xff00) >> 8;
    contras_rgb[2] = (pixel1 & 0xff);
    //astringBuffer1.append(i+"行"+j+"列 R="+contras_rgb[0]+"G="+contras_rgb[1]+"B="+contras_rgb[2] );
    //bufferedWriter.write(astringBuffer1.toString());
    //bufferedWriter.newLine();
    test_rgb[0] = (pixle2 & 0xff0000) >> 16;
    test_rgb[1] = (pixle2 & 0xff00) >> 8;
    test_rgb[2] = (pixle2 & 0xff);
    //bstringBuffer1.append(i+"行"+j+"列 R="+test_rgb[0]+"G="+test_rgb[1]+"B="+test_rgb[2]);
    //bufferedWriter2.write(bstringBuffer1.toString());
    //bufferedWriter2.newLine();
    int Difference_R = Math.abs(contras_rgb[0]-test_rgb[0]); //相减并且求绝对值
    int Difference_G= Math.abs(contras_rgb[1]-test_rgb[1]);
    int Difference_B= Math.abs(contras_rgb[2]-test_rgb[2]);
    //System.out.println("第"+j+"次:"+Math.abs(Difference));
    final int R = 35; //35
    final int L = 130;
    int Q = Difference_R+Difference_G+Difference_B;
    if (Difference_R > R && Difference_G > R && Q>L) { //判断每个值的浮动不超过35
     k++;
    }else if (Difference_G >R && Difference_B>R && Q>L) {
     k++;
    }else if (Difference_R > R && Difference_B>R && Q>L) {
     k++;

    }
   }

  }
  //bufferedWriter.close();
  //bufferedWriter2.close();
  //fileWriter.close();
  //fileWriter1.close();

  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return k;
 }

}

以上就是Java 照片对比功能实现类的详细内容,更多关于Java 照片对比的资料请关注我们其它相关文章!

(0)

相关推荐

  • thinkPHP框架实现类似java过滤器的简单方法示例

    本文实例讲述了thinkPHP框架实现类似java过滤器的简单方法.分享给大家供大家参考,具体如下: 写java web代码的时候,可以定义过滤器,对控制器进行过滤,可以实现权限验证等等 在thinkphp中也可以通过继承父类的方法,实现类似的需求 父类代码 <?php /** * Created by PhpStorm. * User: xieyicheng * Date: 2014/12/11 * Time: 14:43 */ namespace Admin\Controller; use

  • Java实现图片对比功能

    之前用按键精灵写过一些游戏辅助,里面有个函数叫FindPic,就上在屏幕范围查找给定的一张图片,返回查找到的坐标位置. 现在,Java来实现这个函数类似的功能. 算法描述: 屏幕截图,得到图A,(查找的目标图片为图B): 遍历图A的像素点,根据图B的尺寸,得到图B四个角映射到图A上的四个点: 得到的四个点与图B的四个角像素点的值比较.如果四个点一样,执行步骤4:否则,回到步骤2继续: 进一步对比,将映射范围内的全部点与图B全部的点比较.如果全部一样,则说明图片已找到:否则,回到步骤2继续: 这里

  • Java Map接口及其实现类原理解析

    Map接口 Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value: Map中的键值对以Entry类型的对象实例形式存在: 建(key值)不可重复,value值可以重复,一个value值可以和很多key值形成对应关系,每个建最多只能映射到一个值. Map支持泛型,形式如:Map<K,V> Map中使用put(K key,V value)方法添加 Map接口中定义的常用方法 具体使用在实现类中讨论 int size();//获取Ma

  • Java动态获取实现某个接口下所有的实现类对象集合

    最近有个需求,我需要获取所有同一类型的定时任务的对象,并自动执行. 我想的方案是:直接获取某个接口下面所有的实现类的对象集合,方便以后只需要 实现这个接口,就能自动被加载执行.话不多说,说说我的实现方案. 开始想着用反射自己写一个工具类,后面懒得去折腾,就直接用第三方工具包了,这里我用的是org.reflections. maven配置: <dependency> <groupId>org.reflections</groupId> <artifactId>

  • java中List集合及其实现类的方法详解

    List集合_List接口介绍 特点 1).有序的: 2).可以存储重复元素: 3).可以通过索引访问: List<String> list = new ArrayList<>(); list.add("张无忌"); list.add("张三丰"); list.add("章子怡"); list.add("章子怡");//OK的,可以添加 for(String s : list){ System.out.

  • java图片对比度调整示例代码

    前言 本文主要给大家介绍了关于java图片对比度调整的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法如下 测试代码 public static void main(String[] args) { //文件与BufferedImage间的转换 BufferedImage bi=file2img("test.jpg"); //读取图片 BufferedImage bii=img_color_contrast(bi,100); img2file(bii,&quo

  • java 集合之实现类ArrayList和LinkedList的方法

    List 的方法列表 方法名 功能说明 ArrayList() 构造方法,用于创建一个空的数组列表 add(E e) 将指定的元素添加到此列表的尾部 get(int index) 返回此列表中指定位置上的元素 size() 返回此列表中的元素数 clear() 移除此列表中的所有元素 isEmpty() 如果此列表中没有元素,则返回true remove(int index) 移除此列表中指定位置上的元素 indextof(Object o) 返回此列表中首次出现的指定元素的索引,或如果此列表不

  • 详解Kotlin中如何实现类似Java或C#中的静态方法

    大家可以在网络上搜到不少这样的文章,官方推荐是包级函数,也有人说用伴生对象(companion class).这些都是不错的选择,但并不完善,我们在不同的情况下有更好的选择.我总结了几种方法,分别是:包级函数.伴生对象.扩展函数和对象声明.这需要大家根据不同的情况进行选择. 一.包级函数 Kotlin和Java及C#不同的是,可以在包里面直接声明函数.做法和类中是一样的,这里就不多说了,的确是一个非常好的选择.适用于函数不需要不包内部的类进行数据共享的方法. 二.伴生对象 从语义上来讲,伴生函数

  • java根据不同的参数调用不同的实现类操作

    本猿今天今天帮公司写第三支付接口的时候,灵机一动就想写一个扩展性比较的强的充值接口,t通过选择不同的充值渠道,调用不同的充值实现类(好了,废话不多说了,上码!!!!!) 首先你得写一个接口(楼主用的框架是springMVC +Spring +嘿嘿)PayService 然后写你的PayService实现类 EcpssPayService(第三方接口实现类)和 ReapalPayService(第三方接口实现类) 注意几点(注解一定得跟上) 好了之后 就可以 写一个工具类了 SpringBeanU

  • Java获取接口所有实现类的方式详解

    有时候,根据业务逻辑的需求,我们想要获取到某个接口的所有实现类.在这里大致介绍两种方式: 1.借助Spring容器实现 Spring作为一个容器,管理着一个项目中所有经过配置的Java类(xml配置文件或Annotation方式).如果某个接口的所有实现类均被Spring托管了,那么通过Spring就可以很简单的返回这些实现类. import org.springframework.beans.BeansException; import org.springframework.context.

随机推荐