模板匹配与 Python 3.9.1、opencv.python 4.5.1.48 和掩码透明

问题描述

我从 2J 开始就遇到了和这个问题一样的问题,但是没有一个答案适用于 Python 3,所以今天我花了一整天来解决这个问题: python opencv cv2 matchTemplate with transparency(图片取自问题) 我终于设法编写了一个带有掩码(透明度/alpha 通道)和 python (3.9.1) 和 opencv-python (4.5.1.48) 的 cv2.matchTemplate()。

问题是我在 Python 2 中将掩码作为 RGBA(RGB 为零)传递,并且总是找到 (0,0) 作为位置,因为结果的所有值始终为零。 当我尝试只传递 alpha 通道时,它按预期工作! 因为用Python 3没找到这个话题,所以写了一个新问题,希望能得到一些改进的建议。 我在我的代码中编写了两个函数,一个是传统上只找到一个位置 (import { createApp } from "vue"; import { createRouter,createWebHistory } from "vue-router"; import App from "./App.vue"; import LinkOne from "./components/LinkOne.vue"; import LinkTwo from "./components/LinkTwo.vue"; const app = createApp(App); const router = createRouter({ history: createWebHistory(),routes: [ { path: "/link1",component: LinkOne },{ path: "/link2",component: LinkTwo } ] }); app.use(router); app.mount("#app"); )。另一个 (findImgLoc()) 获取值高于阈值的所有坐标。 这两个函数都将所有方法归一化 (0 - 1) 并反转 SQDIFF 和 SQDIFF NORMED 的结果,因此您只能返回坐标,或者在第二种情况下获得坐标列表,这是我认为的对初学者更友好。为了测试,我有一个 findImgTresh() 函数来获取 cmd 输出中的输出图形和信息。 并且仅仅因为我在旧答案中一遍又一遍地阅读,使用代码,掩码适用于所有匹配方法,不仅适用于 TM_SQDIFF 和 TM_CCORR_NORMED!

图片

Source Image

模板

Template Image

没有掩码的结果 test() with findImgTresh()SQDIFF_NORMED -> 4 个位置

输出: thres=.95

Result without mask

带掩码的结果 [[15,123],[15,124],165],166]] with findImgTresh()SQDIFF_NORMED -> 2 个位置

输出: thres=.95

Result with mask

图像上没有遮罩的结果

Result without mask on image

图像上有遮罩的结果

Result with mask on image

代码

[[15,165]]

我希望我能提供更多帮助,并对改进建议感到高兴!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)