android-opencv 应用程序的模板匹配
Posted
技术标签:
【中文标题】android-opencv 应用程序的模板匹配【英文标题】:Template Matching for android-opencv application 【发布时间】: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;
问题是当从上一张图片生成模板后调用“重叠函数”时,应用程序崩溃了。
有人可以帮我解决这个问题吗?
谢谢
【问题讨论】:
【参考方案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/…以上是关于android-opencv 应用程序的模板匹配的主要内容,如果未能解决你的问题,请参考以下文章