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