如何识别c#中图像B中的图像A

时间:2015-09-18 13:48:49

标签: c# .net

我需要Windows窗体中的liitle帮助。如果位图图像A位于位图图像B中,我想编写一个返回true的代码。例如:B = Screenshoot和A =屏幕截图(图标)的一小部分。如果B包含A,则程序返回True,否则返回False。有谁想知道如何做到这一点。

2 个答案:

答案 0 :(得分:0)

这可以使用feature detection算法在OpenCV中完成。

注意,SURF算法不是开源的,因此如果这是商业应用程序,您需要许可它或切换到其他算法(FAST / FREAK)。

official example是用C语言编写的,但以下是SURFFAST使用Emgu包装器进行.Net语言的几个示例。

还有一个完整的工作iOS example,其中包括我为特征检测和光流跟踪做出的一些(非常糟糕的)编写代码。

希望有所帮助..

- ab1

答案 1 :(得分:0)

如果匹配是精确的像素,那就不难了。一种实现方式(使用内存锁定位图加速): 1)通过使用散列将样本位图的每列折叠成单个32位数来使问题成为一维。计算屏幕截图中所有相关像素的哈希值(哈希应该是滚动哈希值以进行有效计算)。 2)使用一些字符串搜索算法来查找样本哈希子字符串。 3)通过逐像素比较验证散列匹配