Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的OpenCV模板匹配错误_Android_Opencv_Template Matching - Fatal编程技术网

Android中的OpenCV模板匹配错误

Android中的OpenCV模板匹配错误,android,opencv,template-matching,Android,Opencv,Template Matching,我正在尝试使用opencv的matchTemplate函数比较两张脸。我有以下代码: Mat img1 = new Mat(); Utils.bitmapToMat(bmpimg1, img1); Mat img2 = new Mat(); Utils.bitmapToMat(bmpimg2, img2); Mat img = new Mat(); Utils.bitmapToMat(bmpimg1, img); Mat templ = new Mat(); Utils.bitmapToMat

我正在尝试使用opencv的matchTemplate函数比较两张脸。我有以下代码:

Mat img1 = new Mat();
Utils.bitmapToMat(bmpimg1, img1);
Mat img2 = new Mat();
Utils.bitmapToMat(bmpimg2, img2);

Mat img = new Mat();
Utils.bitmapToMat(bmpimg1, img);
Mat templ = new Mat();
Utils.bitmapToMat(bmpimg2, templ);
int match_method = Imgproc.TM_CCOEFF;
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);

// / Do the Matching and Normalize
Imgproc.matchTemplate(img, templ, result, match_method);
Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());

// / Localizing the best match with minMaxLoc
MinMaxLocResult mmr = Core.minMaxLoc(result);

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

// / Show me what you got
Core.rectangle(img, matchLoc, new org.opencv.core.Point(matchLoc.x + templ.cols(),
        matchLoc.y + templ.rows()), new Scalar(0, 255, 0));

Toast.makeText(getApplicationContext(), "(" + matchLoc.x + templ.cols() + "," + matchLoc.y + templ.rows() + ")", Toast.LENGTH_LONG).show();
Bitmap  bitmap = Bitmap.createBitmap(img.cols(), img.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(img, bitmap);
Toast.makeText(getApplicationContext(), " "+saveToInternalStorage(bitmap),Toast.LENGTH_LONG).show();
但即使两个图像完全不同,此代码也会绘制矩形。为什么?如何仅在两个图像匹配时绘制矩形?任何建议都有很大帮助