Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将透明png遮罩与其他图片匹配?_Python_Opencv_Image Recognition - Fatal编程技术网

Python 如何将透明png遮罩与其他图片匹配?

Python 如何将透明png遮罩与其他图片匹配?,python,opencv,image-recognition,Python,Opencv,Image Recognition,我对图像识别技术还不熟悉,所以请温柔一点:-)。 目前,我希望将一个文件与屏幕截图相匹配: [右键单击任意图像并在“新建”选项卡中打开以查看更大的版本] 屏幕截图(图像形状:370x370x3): 匹配对象:(有4种不同的类型,每种都有两种变体;一种是普通的,另一种是闪亮的)(图像形状:256x256x4) 从元数据中,我已经可以归纳出可能的匹配项(仅供参考:文件以“pokemon_icon_585*”开头) 我一直想弄清楚的是如何“看到”它是哪一个。(即:最有可能的)。 我一直在做的事

我对图像识别技术还不熟悉,所以请温柔一点:-)。 目前,我希望将一个文件与屏幕截图相匹配: [右键单击任意图像并在“新建”选项卡中打开以查看更大的版本]

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

  • 匹配对象:(有4种不同的类型,每种都有两种变体;一种是普通的,另一种是闪亮的)(图像形状:256x256x4)

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

我一直想弄清楚的是如何“看到”它是哪一个。(即:最有可能的)。 我一直在做的事情:

  • 图像的“中心”是x/2,y*(2/3)。因此,这也使得检测更相关的点变得更容易。我一直在想如何根据距离中心的距离,用重量来检查颜色。在那里运气不太好——可能是因为我的知识有限
  • 通过OpenCV(ORB_create)+匹配(FBMatcher)进行特征检测(找到的匹配项不正确匹配——例如,耳朵与脚匹配,但顶部匹配项本身都位于动物身上,因此可能可用):
  • 我一直在试图弄清楚如何应用遮罩(由png拍摄并通过转换应用到屏幕抓图上)。这将使我能够删除背景,这样就不会干扰检测
  • 下一步是比较整体特征/颜色
  • 所以在上面的列表中,我一直在努力寻找关于3的信息。我可以搜索什么?我应该使用哪些库/方法?第四步呢?你会怎么做? 正如你可以从截图和要匹配的“模板”中看到的,它们与人类非常相似。但是他们有点改变了。至于匹配:截图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,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)
    
    但是如何去除顶部的弧线呢? 我知道我可以剪掉这张照片,但有些口袋妖怪非常大,因此也会被剪掉

    这是最终决定:

    这是面具:

    假设图像大小相同,请参见matchTemplate()。它允许使用掩码来避免在掩码为黑色的情况下进行处理。据我所知,matchTemplate意味着模板应该是完全匹配的。这不是在这种情况下。张贴更多的照片,然后。我们需要了解你的情况。我希望您没有处理缩略图大小的数据。matchTemplate不需要精确匹配,但它不能很好地处理可变形对象或视点更改。。。那些口袋妖怪可能会在屏幕上移动。谢谢你的评论@ChristophRackwitz。我用更多的图片和信息更新了我的帖子。希望这能帮助你帮助我;-)啊好。模型看起来是静态的,只是颜色不同。我会尝试获得梯度(拉普拉斯),将其转换为灰度,然后使用这些表示进行比较。matchTemplate应该可以找到模板的位置,或者如果您已经确切知道模板的位置,请使用简单的绝对差和或类似方法。假设图像大小相同,请参阅matchTemplate()。它允许使用掩码来避免在掩码为黑色的情况下进行处理。据我所知,matchTemplate意味着模板应该是完全匹配的。这不是在这种情况下。张贴更多的照片,然后。我们需要了解你的情况。我希望您没有处理缩略图大小的数据。matchTemplate不需要精确匹配,但它不能很好地处理可变形对象或视点更改。。。那些口袋妖怪可能会在屏幕上移动。谢谢你的评论@ChristophRackwitz。我用更多的图片和信息更新了我的帖子。希望这能帮助你帮助我;-)啊好。模型看起来是静态的,只是颜色不同。我会尝试获得梯度(拉普拉斯),将其转换为灰度,然后使用这些表示进行比较。matchTemplate应该能够找到模板的位置,或者如果您已经确切知道模板的位置,请使用简单的绝对差和或类似的方法。