一尘不染

如何在另一个图像中找到一个图像?

c#

我有2张bmp图片。ImageA是屏幕截图(示例),ImageB是其子集。例如说一个图标。

我想在ImageA中找到ImageB的X,Y坐标(如果存在)。

知道我会怎么做吗?


阅读 524

收藏
2020-05-19

共1个答案

一尘不染

  1. 那么ImageA中的ImageB是否有任何变形?
  2. 图像如何“精确”,例如,像素之间 相同
  3. 您为此拥有多少计算能力?

如果前两个问题的答案为 ,那么您有一个简单的问题。这也有助于了解 第三季度 的答案。

更新:

基本思想是:不要将imageB中每个像素周围的窗口与imageA中每个像素匹配并检查相关性,而要确定两个图像中的 可追踪 点(或特征),这些点是
可跟踪的 。因此,由于拐角周围的区域有点相似(因此不再赘述),因此看起来拐角确实是可追踪的-因此,让我们在两个图像中找到一些确实 很强的
拐角,并搜索看起来最相似的拐角。

这样就减少了用A搜索B中的每个像素,而不是搜索B中的500个角和A中的1000个角(或类似的东西)的问题-更快。

令人敬畏的是,您在OpenCV中可以使用多个这样的 角检测器
。如果您不喜欢使用emguCV(C#变体),请使用FAST检测器查找匹配的角,从而在图像之间定位多个特征。一旦找到了,就可以找到图像左上角的位置。

2020-05-19