我刚刚开始学习计算机视觉,并且正在从事一个简单的项目,以在静止图像中查找基本图标。
我有一个模板图片:
和两个测试图像:
和
我使用模板匹配(使用AForge.net,但我认为它是相同的算法
OpenCV和Emgu使用的。我可能是错的,我是CV的新手),发现阈值为.80563时,我在以上两个示例中都找到了完全匹配的内容,而在我尝试不使用该图标的图像中未找到匹配的内容。
我以为自己要到某个地方,直到我查看每张图片中的匹配项返回的内容(蓝色突出显示的正方形是匹配图像的位置)。
(正确)和(完全错误)
我意识到问题是以下任何一项或全部:
我正在寻找的
最终,我需要一些基本的帮助来解决我的匹配出了什么问题,以便至少可以恢复正确的方向。模板是否匹配正确的方法,但是我需要更改一些内容?还是我需要查看这些库中的其他功能之一?对于这项简单的任务,OpenCV(和EMGU)功能与AForge.net功能之间在功能上有什么不同吗?
最佳答案
在这种情况下,模板匹配是正确的选择,但是您必须正确地做到这一点:
通过这些准则,您可以找到按钮(红色小矩形):
这是OpenCV(C++)中的代码,例如:
#include <opencv2\opencv.hpp>
using namespace cv;
int main()
{
// Load template and image
Mat3b templ = imread("path_to_template");
Mat3b img = imread("path_to_image");
// Convert to grayscale
Mat1b img_gray;
Mat1b templ_gray;
cvtColor(img, img_gray, COLOR_BGR2GRAY);
cvtColor(templ, templ_gray, COLOR_BGR2GRAY);
// Match template
Mat1f result;
matchTemplate(img, templ, result, TM_CCOEFF_NORMED);
// Find highest response
Point maxLoc;
minMaxLoc(result, NULL, NULL, NULL, &maxLoc);
// Draw the red rectangle
rectangle(img, Rect(maxLoc, templ.size()), Scalar(0,0,255), 2);
// Show results
imshow("Result", img);
waitKey();
return 0;
}
关于opencv - 在图像中查找图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34712480/