Я выполняю простое сопоставление шаблонов, но для жизни я все еще не могу выяснить, почему я не получаю правильные совпадения.
Я пробовал, не преобразовавшись в серого и удалить альфа -канал из шаблона, но, к сожалению, это не помогло. Я также пытался с инвариантным подходом шкалы, но тоже не помог. src = "https://i.sstatic.net/lrzpywtd.jpg"/>
И это то, что я делаю:
public static boolean isIconPresent(String largeImagePath, String iconPath, double threshold) {
// Load images
Mat largeImageColor = Imgcodecs.imread(largeImagePath);
Mat iconColor = Imgcodecs.imread(iconPath);
if (largeImageColor.empty() || iconColor.empty()) {
throw new IllegalArgumentException("Could not load images.");
}
// Convert to grayscale (optional)
Mat largeImage = new Mat();
Mat icon = new Mat();
Imgproc.cvtColor(largeImageColor, largeImage, Imgproc.COLOR_BGR2GRAY);
Imgproc.cvtColor(iconColor, icon, Imgproc.COLOR_BGR2GRAY);
// Result matrix
int resultCols = largeImage.cols() - icon.cols() + 1;
int resultRows = largeImage.rows() - icon.rows() + 1;
Mat result = new Mat(resultRows, resultCols, CvType.CV_32FC1);
// Template matching
Imgproc.matchTemplate(largeImage, icon, result, Imgproc.TM_CCOEFF_NORMED);
// Get match location
Core.MinMaxLocResult mmr = Core.minMaxLoc(result);
Point matchLoc = mmr.maxLoc;
double maxVal = mmr.maxVal;
System.out.println("Match confidence: " + maxVal);
return maxVal >= threshold;
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... e-matching