微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将透明 png 蒙版与另一张图片匹配?

如何解决如何将透明 png 蒙版与另一张图片匹配?

我是图像识别方面的新手,所以请保持温和:-)。 目前,我希望将 list of png 文件与屏幕截图相匹配: [右键单击任何图像 + 在新标签中打开以查看更大的版本]

  • 屏幕截图(图像形状:370x370x3):

  • 匹配:(有 4 个不同的,每个有 2 个变体;一个普通的和一个闪亮的)(图像形状:256x256x4)

从元数据中,我已经可以归结出可能的匹配项(仅供参考:文件以“pokemon_icon_585*”开头)。

我一直试图弄清楚的是如何“看到”它是哪一个。 (即:具有最高可能性的)。 我已经做过的事情:

  1. 图像的“中心”是 x / 2,y * (2/3)。因此,这也使检测更多相关点变得更加容易。我一直在试图弄清楚如何根据与该中心的距离使用权重来检查颜色。运气不好——可能是因为我的知识有限。
  2. 通过 OpenCV (ORB_create) + 匹配 (FBMatcher) 进行特征检测(找到的匹配没有正确匹配——这意味着例如耳朵与脚匹配,但顶部匹配本身都位于动物身上,所以这可能是可用的):

  1. 我一直在试图弄清楚如何应用蒙版(由 png 获取并通过转换应用到屏幕抓取上)。这将使我能够删除背景,以免干扰检测。
  2. 下一步是比较整体特征/颜色。

所以在上面的列表中,我一直在寻找有关 3 的信息。我可以搜索什么?我应该使用哪些库/方法?第 4 步呢?你会怎么做? 从屏幕截图和要匹配的“模板”中可以看出,它们与人类非常相似。但他们有点转过身来。至于匹配:截屏1&2应该匹配模板7,截图3&4应该匹配模板5。

当然,如果我的方法错误的,请告诉我您将如何使用一些关键字来处理它!那就太好了!

我目前的做法是创建一个位掩码来移除背景:

# Read it
img1 = cv2.imread('kkgbgwwpwu04ji.png')
# Find the edges
edges = cv2.Canny(img1,100,200)

# Remove the horizontal line at the bottom:
horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(25,1))
detected_lines = cv2.morphologyEx(edges.copy(),cv2.MORPH_OPEN,horizontal_kernel,iterations=2)
cnts,_ = cv2.findContours(detected_lines,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
img2 = edges.copy()
for c in cnts:
    cv2.drawContours(img2,[c],-1,(0,0),2)

final = np.vstack([edges[:x1],img2[x1:x2],edges[x2:]])

# Get a bitmask
kernel = np.ones((5,5),np.uint8)
mask = cv2.morphologyEx(edges.copy(),cv2.MORPH_CLOSE,kernel,iterations=10)

但是如何去除顶部的圆弧呢? 我知道我可以直接剪掉图片,但有些口袋妖怪非常大,因此也会被剪掉。

这是最终的:

这是面具:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。