iphone opencv - 模板匹配
Posted
技术标签:
【中文标题】iphone opencv - 模板匹配【英文标题】:iphone opencv - template matching 【发布时间】:2011-11-08 10:33:57 【问题描述】:我已经在我的 iphone 项目中实现了这个 OpenCV 构建:
http://aptogo.co.uk/2011/09/opencv-framework-for-ios/
它构建成功,我知道如何用我的相机捕捉图像,对其进行灰度化并在图像视图上显示。
但我想做的是将我(用相机)捕获的图像与模板图像进行模板匹配。
我将两张图像都进行了灰度化处理,但我只是不明白“matchTemplate”是如何工作的。这是我到目前为止所拥有的:
cv::Mat grayFrame, grayImg, output;
// This is the template image which i store in a cv::Mat and
// after that i grayscale the image
UIImage *testImage = [UIImage imageNamed:@"qr.png"];
cv::Mat tempMat = [testImage CVMat];
cv::cvtColor(tempMat, grayImg, cv::COLOR_RGB2GRAY);
// Convert captured frame to grayscale
cv::cvtColor(_lastFrame, grayFrame, cv::COLOR_RGB2GRAY);
// Having trouble here...
cv::matchTemplate(grayFrame, grayImg, output, CV_TM_CCORR_NORMED);
// Display result
// This already works for both the captured image and the template image
camView.image = [UIImage imageWithCVMat:grayFrame];
这段代码的问题是,是这一行吗:
cv::matchTemplate(grayFrame, grayImg, output, 1);
我不确定我是否做得对。因为我没有像“MinMax”那样在“输出”中得到结果来获取找到的匹配的位置......我什至将正确的变量传递给 matchTemplate 函数......??
无论如何,有人可以告诉我我做错了什么以及如何解决这个问题吗?
编辑- 添加了我的变量“输出”的屏幕截图感谢您的帮助!
【问题讨论】:
【参考方案1】:matchTemplate() 函数返回一个矩阵,其值表示在原始图像的每个像素上匹配的概率。它包含浮点数据并具有相同的大小(与输入的宽度/高度)。要提取最可能匹配的位置,您必须对结果运行 minMaxLoc() 函数。
【讨论】:
谢谢,我刚刚通过阅读本主题了解了该方法:tech.groups.yahoo.com/group/OpenCV/message/77992 -- 但我仍然不明白这是如何给我位置的,因为它只给了我 minValue 和maxValue -> minMaxLoc(输出, &minVal, &maxVal);知道如何找回吗?? void minMaxLoc(InputArray src, double* minVal, double* maxVal=0, Point* minLoc=0, Point* maxLoc=0, InputArray mask=noArray())。它返回值和位置。发送对两个点的引用,它会将它们设置为所需的值。 我认为我的构建不正确,因为我没有可以通过 minLoc/maxLoc 点的方法。 i39.tinypic.com/4lniok.png -- 你在 iOS 上使用什么库? 别着急,有一些重载的方法,只要用上面介绍的参数调用,它就会找到好的。 你是对的。它确实指向了您所说的重载方法。所以我会把你的答案标记为正确的,因为它是正确的。但我确实希望你能帮我解决最后一件事。因为我传递了一个 Point 结构,但它给了我一个错误,因为: - 没有已知的从 Point *(又名 Point *)到 Point *(又名 Point_以上是关于iphone opencv - 模板匹配的主要内容,如果未能解决你的问题,请参考以下文章