Bitcoin Forum
May 29, 2024, 01:40:44 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: How to identify two similar images?  (Read 120 times)
coolguitar (OP)
Newbie
*
Offline Offline

Activity: 1
Merit: 0


View Profile
March 04, 2020, 04:58:29 AM
 #1

We can use Opencv to find the similar images,below is a simple java code

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

    public static void main(String[] args) {
        String basePicPath = "D:\\ib\\face-detact\\src\\pics\\";
        double compareHist = compare_image(basePicPath + "image_1.png", basePicPath + "image_2.png");
        System.out.println(compareHist);
        if (compareHist > 0.72) {
            System.out.println("matched!");
        } else {
            System.out.println("not match!");
        }
    }

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

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

        for (Rect rect : faceDetections.toArray()) {
            Mat mat = new Mat(image, rect);
            return mat;
        }
        return null;
    }

}
The sample similar images:
image1:https://image.emojipng.com/5/5.png
image2:https://image.emojipng.com/247/502247.png


Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!