微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决模板匹配与 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 举报,一经查实,本站将立刻删除。