问题描述
我从 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 (将#修改为@)