Opencv ile resi karşılaştırma yapmaya çalışıyorum dokümanlarından bir şeyler yaptım bir kaynak resim ise karşılaştırılacak resmi alıp işleme tabi tutan bir metot yazdım fakat şöyle bir sorunum var.Resimleri karşılaştırıyor üzerinde 2.resim varsa yani o resmin bir parçası ise kare içerisine alıyor,ama resimde 2. parça yoksa metot sonucu false olarak döndüreceğim fakat resim üzerinde 2.parça var mı yokmu bunu öğrenemiyorum kaynaklarda MinMaxLocResult <1 den ise karşılaştırma başarısız >=1 ise karşılaştırma başarılıdır demişler fakat her resim karşılaştırmada MinMaxLocResult bana 1 değerini veriyor boş resim karşılaştırsam bile 1 döndürüyor.

/*
     *sourceImage:Kameradan yakalanan anlık görüntü,kaynak resim 
     *faceImage:Karşılaştırmak istenilen yüz
     *match_method:Karşılaştırma tipi olarak genellikle Imgproc.TM_CCOEFF kullanacağız
     *
     *Karşılaştırma başarılı ise true,karşılaştırma sonucu başarısız ise false döndürür  
    */
    public boolean Match(Mat sourceImage, Mat faceImage) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
        System.out.println("\\nYüz karşılaştırma başladı");

        //Karşılaştırma tipi
        int match_method=Imgproc.TM_CCOEFF;
        boolean isMach=false;

        Mat img = sourceImage;
        Mat templ = faceImage;

        //  Sonuç matrisleri
        int result_cols = img.cols() - templ.cols() + 1;
        int result_rows = img.rows() - templ.rows() + 1;
        Mat result = new Mat(result_rows, result_cols, CvType.CV_32FC1);

        // Karşılaştırma yapılıyor
        Imgproc.matchTemplate(img, templ, result, match_method);
        Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());

        MinMaxLocResult mmr = Core.minMaxLoc(result);

        Point matchLoc;
        if (match_method == Imgproc.TM_SQDIFF || match_method == Imgproc.TM_SQDIFF_NORMED) {
            matchLoc = mmr.minLoc;
        } else {
            matchLoc = mmr.maxLoc;
        }

        // / Yakalanan yüzü kare içerisine al
        Core.rectangle(img, matchLoc, new Point(matchLoc.x + templ.cols(),
                matchLoc.y + templ.rows()), new Scalar(0, 255, 0));
        System.out.println("Yüz tanıma tamamlandı ");

        return isMach;

    }

soruldu: 18 Eyl '15, 03:51

meSutPiskin's gravatar image

meSutPiskin
3206611
cevap kabul oranı: 23%

Bu soruya ilk cevap veren sen ol!
toggle preview

powered by BitNami OSQA