ruby - Ruby OpenCv模板匹配阈值

标签 ruby opencv template-matching

我正在尝试在图片上进行模板匹配,以便找到所有匹配项。为此,我想使用0到1之间的阈值来停止进程。我正在使用以下代码:

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作为最小值和最大值。

我一直在Internet上冲浪,但找不到我的代码中的错误。有什么方法可以标准化结果的最小值和最大值(介于0和1之间)?

最佳答案

终于我找到了解决方案。在深入阅读OpenCV官方文档中的template matching article之后,我将match_image转换为灰度,并更改了使用CCOEFF_NORMED方法的模板匹配方法。使用此方法,匹配点由最大位置(result.min_max_loc [3])给出。

现在,当完全匹配时,最大值几乎等于1,而当匹配相似但不相等时,最大值下降。

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)
match_image.BGR2GRAY

10.times.each do |t|
  result = match_image.match_template(template, :ccoeff_normed)
  pt1 = result.min_max_loc[3]
  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)

关于ruby - Ruby OpenCv模板匹配阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41892953/

相关文章:

ruby-on-rails - 在路由重定向 block 中访问 Rails 路由助手

python - ffmpeg rtmp 在 youtube 上播放速度低于 1x

opencv - 大小和响应在 SURF 关键点中究竟代表什么?

java - 如何检测图片中图片位置可能发生变化的子集图像

ruby - Net::HTTP 对 HTTPS 请求的响应极其缓慢

ruby-on-rails - 呈现另一个命名空间的一部分

Ruby 2.3.3 接地气的 Rubyist - 25 :Fixnum 的未定义方法 `balance'

python - 在 Python 中使用 OpenCV 对点进行不失真时的错误结果

xcode - OpenCV 2.4.7 在 MacOS 上构建(Maverick + Xcode 5.01 + CUDA 5.5)

c++ - 缺少作用域变量 OpenCV c++