位置: IT常识 - 正文
推荐整理分享【Android App】人脸识别中使用Opencv比较两张人脸相似程度实战(附源码和演示 超详细)(android_app.intro),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:android apkpure,apk.renme,apprentice,apk.renme,android-app,android render,apk.renme,android render,内容如对您有帮助,希望把文章链接给更多的朋友!
需要全部代码请点赞关注收藏后评论区留言私信~~~
一、比较两张人脸的相似程度直方图由一排纵向的竖条或者竖线组成,横轴代表数据类型,纵轴代表数据多少。 图像直方图经常应用于特征提取、图像匹配等方面。
假设有两幅图像,它们的直方图很相似,这说明两幅图的像素分布相当接近,他们很可能来自相邻场景,相似度越高,两幅图越可能是同样来源,这便是直方图应用于图像匹配的缘由。OpenCV的Imgproc工具有一个compareHist方法,可以比较两个矩阵结构的相似程度,其内部就采用直方图比较两幅图像像素点灰度值的分布情况,因为只有灰度值参加比较,所以要先将全彩矩阵转为灰度矩阵再调用Imgproc的compareHist方法加以判断
相似度比较步骤如下
(1)分别对两张图片检测人脸,得到各自的人脸矩阵数组;
(2)两张图片都找到人脸的话,再从中截取人脸矩阵并转成位图对象;
(3)调整位图尺寸,使得两幅图片的宽高保持一致,也就是把较大的位图缩放到较小位图的尺寸;
(4)把两个位图对象转为灰度矩阵,再通过直方图比较它们的相似度;
由于compareHist方法的返回值在0-1之间,值越大表示越相似,一般相似度达到0.5就很高了
二、效果展示世界杯进行的如火如荼,现在十六强的名单已经全部出来了,接下来让我们用世界杯中的著名球星的照片来进行相似度比较
1:内马尔与梅西 由结果可见不太像
2: C罗与梅西 由结果可见比较高了
3:C罗与贝克汉姆(年轻的时候) 由结果可见是相当高的相似度
三、代码部分源码如下 需要全部代码请点赞关注收藏后评论区留言私信~~~
package com.example.face;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import com.example.face.util.BitmapUtil;import com.example.face.util.FaceUtil;import org.opencv.android.BaseLoaderCallback;import org.opencv.android.LoaderCallbackInterface;import org.opencv.android.OpenCVLoader;import org.opencv.android.Utils;import org.opencv.core.Mat;import org.opencv.core.MatOfRect;import org.opencv.core.Rect;import org.opencv.core.Scalar;import org.opencv.core.Size;import org.opencv.imgproc.Imgproc;import org.opencv.objdetect.CascadeClassifier;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;public class CompareImageActivity extends AppCompatActivity { private final static String TAG = "CompareImageActivity"; private int CHOOSE_CODE1=31, CHOOSE_CODE2=32; // 挑选第一张图片和挑选第二张图片的请求码 private Bitmap mBitmap1, mBitmap2; // 第一张图片和第二张图片的位图对象 private ImageView iv_face1, iv_face2; // 第一张图片和第二张图片的图像视图 private TextView tv_result; //上一篇:阿拉普扎的船屋,印度喀拉拉邦 (© Martin Harvey/The Image Bank/Getty Images)(阿普拉萨)
下一篇:卢塞恩老城,瑞士 (© Xantana/Getty Images)(卢塞恩小镇瑞士)
友情链接: 武汉网站建设