我目前正在尝试在视频中查找图片。主要目标是对视频执行某些操作,例如屏幕上显示的按下按钮或弹出窗口。
我正在使用的代码使用OpenCV模板匹配功能:
// For SQDIFF and SQDIFF_NORMED, the best matches are lower values. For all the other methods, the higher the better
if( matchingMethod == CV_TM_SQDIFF || matchingMethod == CV_TM_SQDIFF_NORMED )
matchLoc = minLoc;
else
matchLoc = maxLoc;
if( !((matchLoc.x == 0) && (matchLoc.y == 0)) || maxVal >= 0.8)
return TRUE;
return FALSE;
}
使用这两个模板完成测试:
完整的图像是一个3840x2160的图像(我不能不是整个图像,因为它在bmp中太大了):
1)问题是,对于两个差异像素极少的模板,算法如何能够检测到第一个但完全跳过第二个? 2)颜色深度是否可能导致检测出现问题?
感谢您的帮助和建议
答案 0 :(得分:0)
对于那些可能有同样问题的人,我只需要以不同方式管理返回值。
而不是
if( !((matchLoc.x == 0) && (matchLoc.y == 0)) || maxVal >= 0.8)
return TRUE;
一旦找到潜在匹配(80%匹配),返回true。
现在我只有在maxVal高于0.99时返回true,这意味着非常高的匹配。
if( maxVal >= 0.99)
return TRUE;
我改变的第二个元素是用于对像素值进行分类的阈值。我已将此值减小到0.82而不是0.94以获得更多可能的匹配,然后使用maxVal值进行过滤。