Почему matchTemplate дает неправильные совпадения в центре изображения?

Я использую matchTemplate() в openCV для поиска в небольшой области кадра камеры, скажем, область 128x128 в верхнем левом углу для меньшего шаблонного изображения, скажем, размером 32x32.

У меня странная проблема. При рисовании прямоугольника в minLoc у меня иногда бывает совершенно плавное и нормальное отслеживание / сопоставление, и поэтому я знаю, что мой код (в основном) работает.

Проблема, однако, заключается в том, что я выбираю случайные шаблоны для сопоставления при каждой инициализации, и в 90% случаев центр searchRegion находится там, где совпадение (неправильно) обнаружено. Независимо от того, куда я перемещаю камеру, центр изображения "совпадает" (с небольшими флуктуациями в случайных точках через каждые несколько кадров).

Я что-то упускаю из-за того, как работает matchTemplate/normalize? Почему центр изображения src неправильно выбран в качестве совпадения?

Вот код, обобщающий то, что я делаю.

        Mat searchRgn = frame.submat(searchRgnRect);
        int result_cols = searchRgn.cols() - foi_img.cols() + 1;
        int result_rows = searchRgn.rows() - foi_img.rows() + 1;
        Mat result = new Mat(result_rows,result_cols, CvType.CV_32FC1);

        Imgproc.matchTemplate(searchRgn, foi_img, result,Imgproc.TM_SQDIFF_NORMED);
        Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1);
        Core.MinMaxLocResult mmr = Core.minMaxLoc(result);
        //draw rectangle at mr.minLoc

0 ответов

Другие вопросы по тегам