Я использую OpenCV (opencv_java248). У меня есть одно изображение шаблона. У этого шаблона изображение есть логотип какой-то компании. Я хочу знать, содержит ли этот логотип другое изображение. Я где-то получил код.Совместимость шаблона в openCV [JAVA]
public void run(String inFile, String templateFile, String outFile,
int match_method) {
System.out.println("Running Template Matching");
Mat img = Highgui.imread(inFile);
Mat templ = Highgui.imread(templateFile);
///Create the result matrix
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());
Imgproc.threshold(result, result, 0.5, 1.0, Imgproc.THRESH_TOZERO);
///Localizing the best match with minMaxLoc
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;
}
double threashhold = 0.40;
if (mmr.maxVal > threashhold) {
Core.rectangle(img, matchLoc, new Point(matchLoc.x + templ.cols(),
matchLoc.y + templ.rows()), new Scalar(0, 255, 0));
}
// Save the visualized detection.
Highgui.imwrite(outFile, img);
}
Он отлично работает, когда шаблон и целевой образ имеют одинаковый масштаб. Мой вопрос: как я могу сделать это неуместным? My search image and logo
Я добавил немного дополнительного ответа на вопрос о масштабной инвариантности – user3510227
Это действительно полезно.Я добавил изображение для поиска и логотип в отредактированном вопросе. Вы предлагаете обнаружение функции, но можете указать конкретный алгоритм. который я должен использовать coz, насколько известно, есть число algo. и некоторые из них запатентованы. Мое очень основное требование состоит в том, что они должны быть свободными, и они должны возвращать некоторый уровень уверенности в сопоставлении (т. Е. При сопоставлении шаблонов, я получаю MinMaxLocResult.maxval). –
В OpenCV SIFT/SURF - это два запатентованных метода, остальные (насколько мне известно) доступны для использования, есть много попробовать [см. Здесь] (http://docs.opencv.org/modules/features2d/ doc/feature_detection_and_description.html), FAST может быть хорошей отправной точкой. Но от взгляда на ваш логотип может быть проще: треугольники являются единственной желтой формой на документе. Вы могли бы просто искать желтые пиксели, и если их достаточно, и они относительно близки друг к другу (база по размеру изображения), у вас есть совпадение. – user3510227