问题标签 [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 投票
0 回答
214 浏览

python - 匹配多个模板时如何加快 cv.matchTemplate?

我使用 openCV 进行模板匹配。我打算用它来检测实时提要中的模板。目前我正在使用 63 个模板,并且图像匹配平均值的总时间约为 9 毫秒。这对于我想到的应用程序来说太慢了。

到目前为止我已经完成的优化:

  1. 灰度一切
  2. 裁剪源图像
  3. 对所有内容进行下采样

我还能尝试什么来缩短时间?我认为提要大约是 20 fps,并且我会在此运行更多的 CV 内容,因此 1 毫秒之类的将是最佳目标。

到目前为止,这是我的代码:

我在这里提供了针:https ://failiem.lv/u/t6sqtx7tv

这里还有几个干草堆:https ://failiem.lv/u/bttrwy6mc

任何和所有的帮助将不胜感激!

0 投票
0 回答
22 浏览

python - 如何在 OpenCV 中获得 matchTemplate 分数?

(以上代码由https://docs.opencv.org/4.5.2/d4/dc6/tutorial_py_template_matching.html提供)

但是,pt 只包含点的 x 和 y 坐标但没有分数,有没有办法在阈值处理后获得 loc 中那些匹配点的分数?

PS:我正在尝试匹配图像中的多次出现,所以 minmaxLoc 对我不起作用。

0 投票
1 回答
52 浏览

c++ - openCV - 从使用 hWND C++ 的窗口中使用 matchTemplate()

我正在运行一个无限循环,每一帧我都从所需的窗口截取屏幕截图并将其转换为 Mat,然后使用 matchTemplate 在该 Mat 中搜索模板图像。如果我读入模板图像和整个图像,我可以使用 TM_SQDIFF 方法成功使用该函数。但是,当我运行下面的代码时,即使模板不存在,也会始终绘制一个矩形,并且如果模板存在,则永远不会超过模板。有任何想法吗?

0 投票
0 回答
57 浏览

python - Opencv matchTemplate 无法检测到相似的对象

我正在使用 OpenCV 4.5.4 在另一个图像中定位图像。为此, matchTemplate 函数。

任务是在桌子上找到“芯片”,让机器人将它们分类到杂志中以进行自动化生产。桌子上只有一种“芯片”,但大约有一半是翻转的,因此机器人会将它们分类到 2 个杂志中,然后翻转其中一个以进行下一个生产步骤。并非所有芯片都必须在一个步骤中检测到,因为它们重叠很多。机器人可以整理出检测到的照片,然后回到静止位置拍摄新照片。

示例场景: 场景

对于芯片的黄金面来说,它运作良好

模板:object_a

结果:result_obj_a_0_5

但是当我使用另一侧的模板时,我得到的正确检测很少,当降低匹配阈值时,它会在物体之前错误地检测到金属台。

模板:object_b

结果阈值 0.5:result_obj_b_0_5

结果阈值 0.4:result_obj_b_0_4

两个模板都是从场景图像中剪切出来的,只是旋转以获得正确的检测框。

我的代码:

上面的代码只是演示问题的一个工作示例。我改进了代码以过滤重复检测并显示找到的框的旋转轴。

示例提炼结果

由于我对 matchTemplate 函数很不熟悉,我的问题是有没有办法提高检测率。我感谢任何帮助。

0 投票
1 回答
52 浏览

python - 在匹配“opencv”的模板上使用屏幕截图

[在此处输入图片描述][1]晚上好,我想制作一个屏幕截图并将其用于模板匹配但每次我尝试时都会出现此错误,我不是专业程序员我只是为了好玩而这样做有人可以帮助我,这将是惊人的。谢谢。

我得到的错误: cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\templmatch.cpp:1164: error: (-215:Assertion failed) (depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2 in function 'cv::matchTemplate'[enter image description here][2]

如果我使用通过软件拍摄的截图,它可以完美运行,但是当我尝试使用这个脚本拍摄的截图时,它不起作用。

此版本的代码用于直接使用 2 张图片而没有截图:

错误图片:[1]:https ://i.stack.imgur.com/G0f5R.png

档案.png [2]:https ://i.stack.imgur.com/i1qea.png

ecran1.png(此图像是使用软件截取的屏幕截图,当我使用此图像而不是截取脚本时,代码可以完美运行)[3]:https ://i.stack.imgur.com/bQPFJ.jpg

这是我使用图像 3 而不是屏幕截图时的结果图像(程序有效)[4]:https ://i.stack.imgur.com/eAEXT.jpg