如何解决模板匹配与 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!
模板
没有掩码的结果 (test()
with findImgTresh()
和 SQDIFF_norMED
-> 4 个位置)
输出: thres=.95
带掩码的结果 ([[15,123],[15,124],165],166]]
with findImgTresh()
和 SQDIFF_norMED
-> 2 个位置)
输出: thres=.95
图像上没有遮罩的结果
图像上有遮罩的结果
[[15,165]]
我希望我能提供更多帮助,并对改进建议感到高兴!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。