我想在圖片上進行模板匹配以找到所有匹配。爲了做到這一點,我想使用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] ...
我試圖使用normalize方法的結果,但它總是給我0和1作爲最小值和最大值。
我一直在網上衝浪,我找不到我的代碼上的錯誤。是否有任何方法來標準化0和1之間的結果最小值和最大值?
我不確定我是否理解。難道你不能應用一些算術和布爾邏輯的最小和最大來檢查你是否應該打破循環? –
我想在結果低於或高於閾值時打破循環,但最小值和最大值不允許我這樣做。 – ReyLitch
你是說你不知道邊界應該是什麼?出現錯誤時,你會期望min和max落在'(0..1)'之外嗎? –