Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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 opencv模式匹配不起作用_Python_Python 3.x_Opencv_Image Processing - Fatal编程技术网

Python opencv模式匹配不起作用

Python opencv模式匹配不起作用,python,python-3.x,opencv,image-processing,Python,Python 3.x,Opencv,Image Processing,我需要找到图像中的所有图像,对于此创意解决方案: import cv2 import numpy as np img_rgb = cv2.imread('source.png') img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) template = cv2.imread('block.png', 0) w, h = template.shape[::-1] res = cv2.matchTemplate(img_gray, templ

我需要找到图像中的所有图像,对于此创意解决方案:

import cv2
import numpy as np

img_rgb = cv2.imread('source.png')
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
template = cv2.imread('block.png', 0)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF)

threshold = 0.8
loc = np.where(res >= threshold)

for pt in zip(*loc[::-1]):
    cv2.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)

# cv2.imwrite('res.png', img_rgb)
cv2.imshow('output', img_rgb)
cv2.waitKey(0)
来源数据:

(来源)

(模板)

我试图使用此代码,但失败了

我现在看到的是:

我期望得到的是:

怎么了? 我正在使用python 3.5和opencv 3.3.0.10

PS:非常有趣的事情,它工作完美,但只找到一个匹配项(最佳匹配项)

我绝对不是OpenCV的专家,它的各种模板匹配方法(尽管巧合的是我已经开始使用它)

然而,在您的示例中,有两件事情非常突出

您使用cv2.TM_CCOEFF方法,该方法给出的结果普遍高于0.8阈值。因此,图像中的每一处都匹配出一个巨大的红色矩形斑点。 如果要使用此方法,请尝试cv2.TM_CCOEFF_NORMED将结果归一化到1以下

但我最好的10分钟尝试是使用

method = cv2.TM_CCORR_NORMED
和背景

threshold = 0.512
给予


但这并不令人满意,因为必须对阈值进行相当精确的“调整”,以消除大多数不匹配。毫无疑问,有更好的方法来获得更可靠的突出匹配。

调整阈值。此外,OpenCV的模板匹配不考虑alpha通道或掩码,这可能在您的任务中好得多。阈值调整将适用于具体图像,但我有不同类型的图像,需要通用解决方案编码您自己的模板匹配与alpha通道或掩码的支持。谢谢,我会为参与做很多尝试,但我会使用不同的图片,不能为每个图片调整阈值,所以解决方案还没有准备好。还有一件有趣的事情[此解决方案)效果完美,但只能找到一张图像而不是全部图像,请您更改此解决方案以查找所有图像好吗?我的技能太低,这很公平,我没有尝试为您生成完整的解决方案。您问我为什么会得到实心红色图像结果,这就是我的答案试图解释的。我认为此模板方法应该ld仍然可以很好地处理你的图像,但可能需要一些额外的研究来找出如何最好地应用它。