问题标签 [matchtemplate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
6586 浏览

python - 具有透明度的python opencv cv2 matchTemplate

OpenCV 3.0.0 添加了在执行模板匹配时指定掩码的功能。当我指定掩码时,我收到此错误:error: (-215) (depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2 in function matchTemplateMask

模板图像(具有透明度的 PNG):

在此处输入图像描述

源图像:

在此处输入图像描述

代码

图像类型有问题吗?我无法使用 matchTemplate 方法的新掩码参数找到任何示例(在 Python 中)。有谁知道如何制作面具?

0 投票
1 回答
284 浏览

c# - 匹配来自相机捕获的模板时访问冲突/程序没有响应。(C# EmguCV)

这是我目前在 C# 和 EmguCV 中使用的代码:

我试图在相机捕捉中找到一个模板,但是,当我运行程序并开始相机捕捉时,我的相机 LED 亮起,然后程序在尝试捕捉时变得没有响应。也许它与匹配模板函数的放置或使用的变量类型有关,但我不太确定,因为我没有那么有经验,所以我想对我的代码问题进行一些输入。

我确实意识到不需要 imageToShow 变量,但我决定保留它,直到我可以让事情正常工作,然后我可以自己更多地处理它。

在这里找到了用于检测模板的代码 emgu find image a in image b

它主要用于检测 2 个静态图像之间的模板,但我将源编辑为来自网络摄像头。

当我从代码中删除 using match 模板段时,网络摄像头工作正常。

任何输入将不胜感激,感谢和抱歉,如果这是一个明显的错误,我对这种事情还是新手。

编辑:忘了提到它在调试程序时给出了这个错误

0 投票
3 回答
6263 浏览

python - 如何解释匹配模板输出?(openCV,Python)

在阅读了文档并在整个互联网上搜索之后,我仍然不明白如何解释 openCV 的 matchTemplate 函数的输出。

我的理解:

我知道我得到了一种矩阵,其中的每个部分都具有匹配值。这个矩阵中的每个元素决定了它与模板的相似度。

例如,我可以过滤所有匹配值低于 0.7 的位置

numpy.where(result >= 0.7)

我不明白的是这些信息如何存储在我从 matchTemplate 函数获得的输出中,以及如何从输出中提取匹配的位置。

基本上我想做的是将多个模板匹配到一个图像,然后确定哪个模板与哪个位置最匹配(具有一个位置的所有应用模板的最大匹配值)。

我的想法是将匹配值提取到每个模板的矩阵中,然后将矩阵(它们的元素)相互比较以找到最佳匹配。

感谢您的帮助,请纠正我错的地方,

问候唐

0 投票
0 回答
5510 浏览

python - OpenCV 错误:断言失败((深度 == CV_8U || 深度 == CV_32F)

我知道这个问题已经被问过很多次了,但没有一个能解决下面的问题。我有两个都是 uint8 的 np 数组,但 opencv 似乎错误地认为一个是 32F。为什么会这样,如果我想将两个图像匹配为模板,我该如何在 python 中修复它。

当我尝试匹配模板时导致错误:

值得注意的是,我创建了两个 numpy 数组,如下所示: 第一个:

第二个:

是的,我知道,我可以使用 cv2.imread 加载两者,一切都会好起来的,但在我的情况下,这是不可能的,因为我的示例中需要 PIL(用于制作屏幕截图img = cv2.cvtColor(np.array(ImageGrab.grab()), cv2.COLOR_BGR2RGB)),所以我需要从 PIL 转换为 Opencv,我需要让上面的例子工作。

0 投票
1 回答
1915 浏览

python - 与已知模板相比,如何测量图像的旋转角度

我已经通过使用下面的方法成功了,但我确信必须有其他更省时的替代方法来提供精确的旋转角度,而不是像下面的方法那样提供近似值。我很高兴听到您的反馈。

该过程基于以下步骤:

  1. 导入模板图像(即:方向为 0º)
  2. 创建相同图像的离散数组,但每个图像与其最近的邻居相比以 360º/rotatesteps 旋转(即:30 到 50 个旋转图像)

所以我得到:

角度 = [0, 10.0, 20.0, 30.0, .../..., 340.0, 350.0]

image_array = [image_1, image_2, image_3, ...] 其中 image_i 是 numpy 数组上的不同通道。

  1. 检索与我们之前旋转并存储到数组中的示例图像相比,我正在查看的角度的“test_image”
  2. 遵循一系列 cv2.matchTemplate() 和 cv2.minMaxLoc() 来找到旋转图像的角度与“test_image”最匹配

  1. 最后,我选择与样本图像匹配的离散化角度作为与“max_val”最大值的模板图像相对应的角度。

考虑到结果精度基于旋转模板图像的数量而具有更高/更低精度的近似值,以及旋转模板数量增加时所花费的上升时间,这已证明效果很好......

我确信必须有其他基于不同方法的更智能的替代方案,例如生成图像的一种“方向矢量”,因此只需将结果数字与样本模板中先前已知的数字进行比较......

您的反馈将不胜感激。

0 投票
0 回答
600 浏览

python - 在图像上匹配图像模板 - cv2-python

如果匹配,我不确定这是否可能在 cv2 中查看特定的行打印位置。

当我尝试比较模板图像时,它正在比较主图像内的整个模板图像(整个块都是白色和黑色)。正因为如此,模板在 70% 的阈值处不匹配。

有什么办法可以让 cv2 不比较整个模板图像而只比较黑线?如下图所示的线条无法识别模板图像,因为在主图像上有一些额外的线条

在此处输入图像描述

有谁熟悉如何解决这个问题?

这是我的代码:

0 投票
0 回答
99 浏览

opencv - opencv matchTemplate 精度问题?

谁能帮我理解为什么 matchTemplate 在模板或图像为零的区域不提供零输出?

这是一个例子

打电话

结果如预期:

相反,调用

我有

那么为什么结果 ccor 的左上角区域不归零呢?这种不精确性在实际案例中引入了不当行为。

谢谢

安德烈亚

0 投票
0 回答
317 浏览

python - 相同形状不同颜色的python cv2匹配模板

我尝试使用 opencv2 匹配模板。

这是我正在搜索的模板和屏幕: screen_template

这是我用来匹配模板的代码:

当我使用 0.4 的阈值时,结果是: 结果

即使我使用的是红色典当模板,opencv2 也仅与 0.4 阈值的蓝色典当匹配。

0 投票
1 回答
856 浏览

opencv - OpenCV“坐标特定”匹配模板

我有一张图像,我需要尽可能快地检测到一个物体。我也知道我只需要检测离中心最近的物体。

AFAIK Opencv 的 MatchTemplate 有点像这样(伪代码):

之后,我必须遍历生成的图像并找到离中心最近的点,这都是相当浪费的。

所以我想知道我是否可以做类似的事情:

基本上我在这里需要的是 calcSimilarity 函数。这将使我能够大大优化流程。

0 投票
1 回答
3387 浏览

python-3.x - OpenCV 无法将模板与图像匹配(matchTemplate)

所以我有一个图像

图片

和一个模板

模板

我想在图像中找到模板图像,但我的代码没有找到任何东西。我尝试缩小尺寸,但仍然没有检测到。请帮我举个例子: