感知哈希算法实现简单图片搜索
来源:互联网 发布:火箭爵士季后赛数据 编辑:程序博客网 时间:2024/05/18 23:28
一、我先声明一下,本文中的源代码是来自网上资源,我这里演示一下如何在Java Web中使用该算法。
资源地址:http://download.csdn.net/detail/haigenwong/4412334
二、
1:servlet部分代码:
List<String> resultPic = SimilarImageSearch.search(filenametest+"."+prefix);List<Work> Indexsearchworks = new dao.WorkDAO().queryOneWorkByPic(resultPic);
这里SimilarImageSearch是负责图片搜索的类,利用search方法搜寻图片,实参部分是用户上传的图片的图片名,resultPic为搜索到的图片名称
2:search方法(里面用到的其他方法在源代码同类名下)
List<String> hashCodes = new ArrayList<String>(); String t1 = System.getProperty("user.dir").substring(0, System.getProperty("user.dir").length() - 4); //本地的图库目录 String filename = t1 + "\\webapps\\media1\\work\\allworks\\"; //存放用户上传的图片目录 String filename2 = t1 + "\\webapps\\media1\\work\\searchPic\\"; String hashCode = null; //存放本地图库的所有图片名称 List<String> fileNames = new ArrayList<String>(); //存放图片搜寻结果 List<String> results = new ArrayList<String>(); //利用FileName类的get方法获取所有图片的名称 fileNames = new FileName().get(); Iterator<String> iter = fileNames.iterator(); //获取每张图片的hash值 while(iter.hasNext()) { String filen = (String) iter.next(); hashCode = produceFingerPrint(filename + filen); hashCodes.add(hashCode);//获取图片的hash值 } //获取用户上传的图片的hash值 String sourceHashCode = produceFingerPrint(filename2+picName); //比较原图与本地图片的汉明距离 for (int i = 0; i < hashCodes.size(); i++) { int difference = hammingDistance(sourceHashCode, hashCodes.get(i)); System.out.print("汉明距离:"+difference+" "); if(difference==0){ System.out.print("一样:"); String name = fileNames.get(i); System.out.println(name); results.add(name); }else if(difference<=5){ System.out.print("非常相似:"); String name = fileNames.get(i); System.out.println(name); results.add(name); }else if(difference<=10){ System.out.print("有点相似:"); String name = fileNames.get(i); System.out.println(name); results.add(name); }else if(difference>10){ System.out.print("完全不一样"); String name = fileNames.get(i); System.out.println(name); } } return results; }
FileName类的get方法(里面用到的其他方法在源代码同类名下):
List<String> filterName = new ArrayList<String>(); filterName.add("jpeg"); filterName.add("jpg"); filterName.add("png"); filterName.add("bmp"); filterName.add("gif");// 自己可以定义 /* * System.out.println(getFileList(ImageHelper.path + "\\allworks\\", * filterName)); */ // 获取本地目录下的图片名称 String t1 = System.getProperty("user.dir").substring(0, System.getProperty("user.dir").length() - 4); List<String> filenames = getFileList(t1 + "/webapps/media1/work/allworks/", filterName); return filenames;
图片搜索的基本原理就是这样,源代码中注释都是有的,看懂并不难,推荐各位去看下。
0 0
- 感知哈希算法实现简单图片搜索
- 感知哈希算法--实现图片搜索
- 图片搜索之感知哈希算法
- 相似图片搜索算法之感知哈希算法
- 相似图片搜索——感知哈希算法
- 相似图片查找感知哈希算法(phash)实现
- Java相似图片搜索算法之"感知哈希算法"实例
- Java相似图片搜索算法之"感知哈希算法"实例
- 图像搜索--感知哈希算法
- 基于感知哈希算法的中药标本相似图片的搜索
- 感知哈希算法--找到相似图片。
- iOS实现感知哈希算法
- 感知哈希算法Java实现
- 感知哈希算法的opencv实现
- 感知哈希算法原理与实现
- 感知哈希算法--python实现
- iOS实现感知哈希算法
- 相似图片检测:感知哈希算法之dHash的Python实现
- Fleury算法求欧拉路径
- Leetcode 104 Maximum Depth of Binary Tree
- LeetCode—417. Pacific Atlantic Water Flow
- 玄学曲线并不玄 教你如何看懂GPU呈现
- 编程规范积累
- 感知哈希算法实现简单图片搜索
- openssl 证书流程和概念
- shell数组操作
- R 语言学习笔记(二)
- ClassLoader 工作机制
- 多视几何:齐次坐标
- 最详细的Log4j使用教程
- Java常用集合类框架的基本接口
- 低功耗版STM8L051的一个诡异配置