【问题标题】:Template Matching for android-opencv applicationandroid-opencv 应用程序的模板匹配
【发布时间】:2013-04-04 08:52:23
【问题描述】:

我使用 OpenCV 为 android 开发了一种算法。我需要找到前一个图像和当前帧之间的重叠。因此,我从以前的图像中生成了模板以匹配当前帧来制作照片。这是完成拍摄的过程。 (拍了10多张照片)

这是我为找到重叠而开发的代码。

public void overlapFinder(Mat inputFrame , Mat inputTemplate )

{

Mat mResult; 

  int resultWidth =  inputFrame.width() - inputTemplate.width() + 1; 

  int resultHeight = inputFrame.height() - inputTemplate.height() + 1;

  mResult = new Mat(resultHeight, resultWidth, CvType.CV_8U); 

  Imgproc.matchTemplate(inputFrame, inputTemplate, mResult,Imgproc.TM_CCORR_NORMED) ; 
  Core.MinMaxLocResult result = Core.minMaxLoc(mResult);

  @SuppressWarnings("unused")

  double maxVal = result.maxVal;

}

问题是当从上一张图片生成模板后调用“重叠函数”时,应用程序崩溃了。

有人可以帮我解决这个问题吗?

谢谢

【问题讨论】:

    标签: android opencv image-processing


    【解决方案1】:

    也许您确实需要先进行一些调试,但无论如何,我可以从您的代码中看到检查图像的大小是值得的 - 您的代码似乎假设模板始终小于输入框架。

    如果不是这样,您将得到否定的resultWidth 和/或resultHeight,这将使其崩溃。

    另一件事 - 文档建议结果类型应为 CV_32FC1

    PS - 尝试像这样初始化你的结果:

    mResult.create(resultHeight, resultWidth, CvType.CV_32FC1); 
    

    【讨论】:

    • 你是对的,模板的大小一直小于当前帧。注意是当我评论该行时: Imgproc.matchTemplate(inputFrame, inputTemplate, mResult,Imgproc.TM_CCORR_NORMED) ;应用程序正常工作(没有找到匹配项)。
    • 好的 - 我已经编辑了我的答案以添加另一种可能性 - 见上文。
    • 尊敬的 Roger,感谢您的帮助 :) 我已经更改了类型,但仍然有这个问题。 !!!!没有它,应用程序的所有部分都可以在手机中正常工作。你有别的想法吗?!!
    • 不!又崩溃了!!!!输入帧和模板图像不是灰度图,是不是有问题?
    • 文档不清楚 - 尝试先转换为灰度?我以此为指导 - docs.opencv.org/doc/tutorials/imgproc/histograms/…
    猜你喜欢
    • 2015-04-20
    • 1970-01-01
    • 2018-10-02
    • 2015-07-22
    • 2012-12-03
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多