【问题标题】:How boundary pixels are treated in matchTemplate() in openCV?openCV的matchTemplate()中如何处理边界像素?
【发布时间】:2013-11-24 18:11:26
【问题描述】:

我正在尝试在两个图像之间进行关联(较小的图像与较大的图像)。 openCv中的边界处理是怎么做的?

cv::matchTemplate(webcamImageReceived,templateImage,resultImage,CV_TM_CCORR_NORMED);

【问题讨论】:

    标签: opencv


    【解决方案1】:

    模板永远不会跨越图像边界,结果图像的大小会减少模板大小(每个图像侧的一半模板大小)。

    看这里:http://docs.opencv.org/doc/tutorials/imgproc/histograms/template_matching/template_matching.html

    (看看:

      /// Create the result matrix
      int result_cols =  img.cols - templ.cols + 1;
      int result_rows = img.rows - templ.rows + 1;
    

    )

    【讨论】:

    • 谢谢,但我以前看过。我的疑问是,当模板图像是给定图像的(0,0)位置时,那时我们是否必须对给定图像进行填充?例如,您在上面发给我的链接,在标题“它是如何工作的”下的那个链接中......请参阅第二张图片,其中模板图片放置在给定图片上但不完全......在这种情况下如何opencv 是否管理相关性?
    • 第二个图像是源图像的缩放片段(仅用于说明)。他们在教程中只处理一张图像。但是您可以使用 copyMakeborder 来控制边框行为。 docs.opencv.org/doc/tutorials/imgproc/imgtrans/copyMakeBorder/…
    • 在“它是如何工作的?”部分下和“要识别匹配区域,我们必须通过滑动将模板图像与源图像进行比较:”....他们已将template image 放在source image 上以开始滑动它。我的问题是,在那种特定情况下......我的 cv::matchTemplate() 做了什么?......我不想控制边界处理,只想知道 matchTemplate() 是如何做到的?
    • 它在源图像上设置ROI(左上角到位置(i,j),宽度和高度等于模板的宽度和高度)。使用相关方程(您通过标志选择)计算结果。将结果放到结果图像的位置 (i,j)。增加位置。并从头开始重复。当它到达 source.cols - template.cols 时,它增加 i ,当它到达 (source.rows - template rows,source.cols - template.cols) 时,它完成处理。
    猜你喜欢
    • 2018-12-25
    • 2014-05-09
    • 2019-01-26
    • 1970-01-01
    • 2012-03-31
    • 2011-12-30
    • 2021-09-14
    • 2012-02-07
    • 2011-06-18
    相关资源
    最近更新 更多