opencv java小应用:比较两个图片的相似度
package com.company;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import java.util.Arrays;
public class FaceCompareMain {
//初始化人脸探测器
static CascadeClassifier faceDetector;
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
faceDetector = new CascadeClassifier(
"D:\\ib\\face-detact\\src\\com\\company\\haarcascade_frontalface_alt.xml");
}
// 1. 灰度化(减小图片大小)
// 2. 人脸识别
// 3. 人脸切割
// 4. 规一化(人脸直方图)
// 5. 直方图相似度匹配
public static void main(String[] args) {
String basePicPath = "D:\\ib\\face-detact\\src\\pics\\";
double compareHist = compare_image(basePicPath + "11_1.png", basePicPath + "11_2.png");
System.out.println(compareHist);
if (compareHist > 0.72) {
System.out.println("人脸匹配");
} else {
System.out.println("人脸不匹配");
}
}
public static double compare_image(String img_1, String img_2) {
Mat mat_1 = conv_Mat(img_1);
Mat mat_2 = conv_Mat(img_2);
Mat hist_1 = new Mat();
Mat hist_2 = new Mat();
//颜色范围
MatOfFloat ranges = new MatOfFloat(0f, 256f);
//直方图大小, 越大匹配越精确 (越慢)
MatOfInt histSize = new MatOfInt(1000);
Imgproc.calcHist(Arrays.asList(mat_1), new MatOfInt(0), new Mat(), hist_1, histSize, ranges);
Imgproc.calcHist(Arrays.asList(mat_2), new MatOfInt(0), new Mat(), hist_2, histSize, ranges);
// CORREL 相关系数
double res = Imgproc.compareHist(hist_1, hist_2, Imgproc.CV_COMP_CORREL);
return res;
}
// "D:\\ib\\face-detact\\src\\com\\company\\a1.jpg"
private static Mat conv_Mat(String img_1) {
Mat image0 = Imgcodecs.imread(img_1);
Mat image = new Mat();
//灰度转换
Imgproc.cvtColor(image0, image, Imgproc.COLOR_BGR2GRAY);
MatOfRect faceDetections = new MatOfRect();
//探测人脸
faceDetector.detectMultiScale(image, faceDetections);
// rect中是人脸图片的范围
for (Rect rect : faceDetections.toArray()) {
//切割rect人脸
Mat mat = new Mat(image, rect);
return mat;
}
return null;
}
}
代码
本文使用opencv 3.4.5版本,opencv大版本api变动不少
java项目设置,需要引入opencv native动态连接库
参考 : https://github.com/opencv/opencv/releases
opencv java小应用:比较两个图片的相似度的更多相关文章
- Java_比较两个图片的相似度
说明:目前使用像素偏移量为5,可根据实际情况相应修改 package com.creditease.fetch.credit.util.similarity; import com.crediteas ...
- JAVA小游戏之两个物体碰撞产生的碰撞检测
首先必须了解两个物体,在移动时,会有怎样的效果,比如沪我们小时候耍过的坦克大战.看起来很简单,但是写起代码来,复杂的要多: 下面举个例子: // 构造一个新的 Rectangle,其左上角的坐标为 ( ...
- 寒假答辩作品:Java小游戏
目录 java入门小游戏[test] 游戏界面 前言 (可直接跳到程序介绍) 前期入门小项目 前期收获 后期自创关卡 后续 java入门小游戏[test] 游戏界面 github地址: https:/ ...
- Convert between cv::Mat and QImage 两种图片类转换
在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...
- OpenCV IplImage FlyCapture2 Image Conversion 两种图像类的相互转化
OpenCV的IplImag和 FlyCapture2 的 Image是两种常见的图片格式,在实际的应用中,我们通常要混合使用OpenCV和FlyCapture2这两个SDK,所以这两种图片格式之间的 ...
- 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果
去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟 ...
- [转] 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果 ---张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3804 去年盛夏之时, ...
- Java小项目--坦克大战(version1.0)
Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...
- (10.16)java小作业!
相信大家刚刚学习java多多少少都会写一些java的基础编程来练练手感,我也不例外!今天想和大家分享一下我最近所接触到的比较有趣的java小编程! 已知a已被赋值,b已被赋值,请编写java程序实现a ...
随机推荐
- LoadRunner使用问题
最近给客户做POC,为了测试大数据的框架的一个并发能力,使用loadrunner进行相关的测试,目前发现几个要注意的地方 1: loadrunner的Java脚本必须使用jdk1.6的32位版本 2: ...
- js-day
1.克莱托指数 公式 :体重(kg) / (身高(m) * 身高(m)) < 20 : 偏瘦 > 20 <25 : 正常 > 25 : 偏旁 步骤: 1.输入体重(weight ...
- 使用Sqlserver事务发布实现数据同步(转)
出处:http://www.cnblogs.com/daizhj/archive/2009/11/18/1605293.html 事务的功能在sqlserver中由来已久,因为最近在做一个数据同步方案 ...
- c#并发编程经典实例文摘
第1章 并发编程概述 1.1 并发编程简介 并发: 多线程(包括并行处理) 异步编程(异步操作)程序启动一个操作,而该操作将会在一段时间后完成 响应时编程(异步事件)可以没有一个实际的开始,可以在任何 ...
- Detailed ASP.NET MVC Pipeline
Posted By : Shailendra Chauhan, 27 Jan 2014 P.NET MVC is an open source framework built on the top o ...
- What is difference between 3-layer architecture and MVC architecture?
By Vikas Singh on Sep 26, 2014 In 3-layer architecture 3-layer architecture separates the applicati ...
- 很棒的bootstrap学习网站
http://www.w3cschool.cc/bootstrap/bootstrap-tutorial.html
- VS2010-安装包制作过程图解
最近做了winform相关程序,开始总结制作安装包过程. 1.首先在打开 VS2010 =>新建=>项目 2.创建一个安装项目 Setup1 在“目标计算机上的文件系统”下我们看见 ...
- WebStrom常用快捷键
查找替换 ctrl+shift+N 通过文件名快速查找工程内的文件(必记) ctrl+shift+alt+N 通过一个字符快速查找位置(必记) ctrl+F 在文件内快速查找代码 ctrl+R ...
- 搭建linux虚拟机
一.VMware 9 安装CentOS 7 -> 创建新虚拟机, 选择稍后安装操作系统 -> 选择Linux系统Centos 64位 -> 填写虚拟机名称, 选择虚拟机安 ...