opencv_005_人脸对比

人脸对比

1.1灰化人脸

为什么要灰化人脸 ?

​ 为了减少噪音,让其匹配更加的准确.

实现:

    public static Mat conv_Mat(String img) {
        Mat image0 = Imgcodecs.imread(img);

        Mat image1 = new Mat();
        // 灰度化
        Imgproc.cvtColor(image0, image1, Imgproc.COLOR_BGR2GRAY);
        // 探测人脸
        MatOfRect faceDetections = new MatOfRect();
        faceDetector.detectMultiScale(image1, faceDetections);
        // rect中人脸图片的范围
        for (Rect rect : faceDetections.toArray()) {
            Mat face = new Mat(image1, rect);
            return face;
        }
        return null;
    }

上面的方法中 有Rect rect : faceDetections.toArray()) 这个是找出一张图人脸的范围

1.2 人脸比对

人脸比对 也手机图像的比对 但是我们上面是有人脸的特征库我们可以检测出人脸 然后进行一个比对

对比

  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;
    }

也可以是传入map

  public static double compare_imag(Mat hist_1 , Mat hist_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;
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenCV是一个开源的计算机视觉库,可以用于处理图像和视频。其中的人脸对比功能可以通过比较两张人脸图像的特征来识别是否为同一个人。 人脸对比的过程主要分为以下几个步骤: 1. 人脸检测:使用OpenCV提供的人脸检测器,可以识别图像中的人脸并标记出人脸区域。 2. 人脸特征提取:通过使用已训练好的深度学习模型或特征提取算法,可以从人脸图像中提取出特征向量,用于表示人脸的唯一属性。 3. 特征对比:将两个人脸的特征向量进行比较,通常使用欧氏距离或余弦相似度等度量方法来衡量两个特征向量之间的差异,来确定它们的相似程度。 4. 阈值判断:根据设定的阈值,判断特征向量之间的差异是否达到一定的相似性要求,从而决定是否认为这两个人脸是同一个人。 在使用OpenCV进行人脸对比时,需要注意以下几点: 1. 先进行人脸检测,确保图像中只包含一个人脸,以提高对比的准确性。 2. 准备好已训练好的人脸特征提取模型,可以使用OpenCV自带的人脸特征提取器,也可以使用其他开源的深度学习模型进行特征提取。 3. 设定合适的阈值,根据具体的应用场景来决定对比的相似性要求,如果阈值设得过低,可能会导致误认为不同人的人脸为同一个人,而设得过高又可能导致难以识别相似但不完全相同的人脸。 总之,OpenCV提供了人脸对比的功能,可以通过对比人脸的特征向量来判断其相似程度,但具体的实现过程需要根据具体需求来选择合适的算法和参数设置。 ### 回答2: OpenCV是一种广泛应用于计算机视觉的开源库,它可以用于图像处理和分析,包括人脸对比。在人脸对比中,OpenCV可以提供一些重要的功能和方法。 首先,我们可以使用OpenCV人脸检测器来检测和定位图像中的人脸。这可以通过使用训练好的人脸检测器(如Haar特征分类器或深度学习模型)来实现。OpenCV提供了现成的人脸检测器,可以用于快速和准确地检测人脸。 然后,我们可以使用OpenCV人脸识别算法来进行人脸对比。常用的人脸识别算法有LBPH(局部二值模式直方图)、Eigenfaces和Fisherfaces。这些算法可以通过将人脸图像转换为特征向量,然后计算特征向量之间的相似度来进行人脸对比。OpenCV提供了这些算法的实现,可以很方便地用于人脸对比。 人脸对比的过程通常包括以下几个步骤:首先,将待对比的图像中的人脸检测出来;然后,使用训练好的人脸识别算法提取人脸的特征向量;最后,计算两个特征向量之间的相似度,即人脸的相似度。 人脸对比在许多应用中都有广泛的应用,如人脸识别门禁系统、人脸认证等。通过使用OpenCV进行人脸对比,我们可以快速准确地识别和比较不同人脸之间的相似度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值