Я пытаюсь сделать соответствие шаблона на картинке, чтобы найти все совпадения. Чтобы сделать это, я хочу использовать пороговое значение от 0 до 1, чтобы иметь возможность остановить процесс. Я использую следующий код:Ruby OpenCv Соответствие шаблону
require 'opencv'
include OpenCV
template_filename = (ARGV.size == 2) ? ARGV[0] : File.expand_path(File.dirname(__FILE__) + '/lena-eyes.jpg')
match_image_filename = (ARGV.size == 2) ? ARGV[1] : File.expand_path(File.dirname(__FILE__) + '/lena-256x256.jpg')
template = CvMat.load(template_filename)
match_image = CvMat.load(match_image_filename)
10.times.each do |t|
result = match_image.match_template(template, :sqdiff_normed)
#result = result.normalize(0, 1, CV_NORM_MINMAX, -1, nil)
pt1 = result.min_max_loc[2]
pt2 = CvPoint.new(pt1.x + template.width, pt1.y + template.height)
match_image.rectangle!(pt1, pt2, :color => CvColor::Black, :thickness => 3)
end
window = GUI::Window.new('Display window')
window.show(match_image)
Проблема заключается в том, что минимальное и максимальное значения, которые я получаю с match_template не между 0 и 1, так что я не в состоянии использовать порог. Первый результат имеет следующие минимальные и максимальные значения: [0.00011, 0.4955]. Другие результаты, которые являются недопустимыми, имеют следующие минимальные и максимальные значения: [0.1190, 0.5369], [0.1296, 0.5369] ...
Я попытался использовать метод нормализации с результатом, но он всегда дает мне 0 и 1 как минимальные и максимальные значения.
Я занимаюсь серфингом в Интернете, и я не могу найти ошибку в своем коде. Есть ли способ нормализовать минимальное и максимальное значения результата между 0 и 1?
Я не уверен, что понимаю. Не могли бы вы применить некоторую арифметическую и логическую логику с min и max, чтобы проверить, следует ли вам разорвать цикл? –
Я хочу разбить цикл, когда результат ниже или выше порога, но значения min и max не позволяют мне это делать. – ReyLitch
Вы имеете в виду, что вы не знаете, какие границы должны быть? Вы ожидали бы, что min и max упадут за пределы '(0..1)', если что-то пойдет не так? –