OpenCV image compareHist и matchTemplate возвращает неправильное значение в Android Java - PullRequest
0 голосов
/ 09 декабря 2018

Я запустил следующую программу для сравнения двух изображений в моем проекте Android.Кажется, что всегда возвращается одно и то же значение (0,1), поскольку разница определяет оба изображения как совпадающие.Вот мой код:

compare.java

private void compare_image(){
    Mat image_1 = Imgcodecs.imread(getResources().getDrawable(R.drawable.real10tk).toString());
    Mat image_2 = Imgcodecs.imread(getResources().getDrawable(R.drawable.noteicon).toString());
    double commutativeImageDiff = this.get_image_difference(image_1, image_2);
    TextView t = findViewById(R.id.textView10);

    int minImgDiff = 1;
    if (commutativeImageDiff < minImgDiff) {
        TextView text = findViewById(R.id.textView11);
        text.setText("M");
        t.setText("" + commutativeImageDiff);
    }
    else t.setText("" + 10000);
}

@SuppressLint("SetTextI18n")
private double get_image_difference(Mat image_1, Mat image_2) {
    MatOfFloat ranges = new MatOfFloat(0f, 256f);
    MatOfInt histsize = new MatOfInt(256);

    calcHist(Arrays.asList(image_1), new MatOfInt(0), new Mat(), image_1, histsize, ranges);
    calcHist(Arrays.asList(image_2), new MatOfInt(0), new Mat(), image_2, histsize, ranges);

    double img_hist_diff = compareHist(image_1, image_2, HISTCMP_BHATTACHARYYA);// img_hist_diff = 0

    int result_cols = image_1.cols() - image_2.cols() + 1;
    int result_rows = image_1.rows() - image_2.rows() + 1;
    Mat result = new Mat(result_rows, result_cols, CvType.CV_32FC1);
    Imgproc.matchTemplate(image_1, image_2, result, TM_CCOEFF_NORMED);

    Core.MinMaxLocResult minMaxLocRes = Core.minMaxLoc(result);

    double accuracy = minMaxLocRes.maxVal;
    Point location = minMaxLocRes.maxLoc;

    double img_template_diff = 1 - accuracy;    //accuracy = 1

    return (img_hist_diff / 10) + img_template_diff;
}

Кажется, что переменная точности всегда равна '1', а функция get_image_difference всегда возвращает 0,1

...