Python-OpenCV 图像处理(十二):模板匹配

import cv2
import numpy as np
from matplotlib import pyplot as plt

__author__ = "zxsuperstar"
__email__ = "zxsuperstar@163.com"

"""
模板匹配
"""
def template_demo():
    tpl = cv2.imread("mb.jpg")
    target = cv2.imread("t.jpg")
    cv2.imshow("template",tpl)
    cv2.imshow("target",target)
    methods = [cv2.TM_SQDIFF_NORMED,cv2.TM_CCORR_NORMED,cv2.TM_CCOEFF_NORMED]
    th, tw = tpl.shape[0:2]
    for md in methods:
        print(md)
        results = cv2.matchTemplate(target,tpl,md)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(results)
        if md == cv2.TM_SQDIFF_NORMED:
            tl = min_loc
        else:
            tl = max_loc
        br = (tl[0] + tw ,tl[1]+th)
        cv2.rectangle(target,tl,br,(0,0,255),2)
        cv2.imshow("match-" + np.str(md),target)


if __name__ == "__main__":
    # src = cv2.imread("t.jpg") #blue green red
    # # cv2.namedWindow("image", cv2.WINDOW_AUTOSIZE)
    # cv2.imshow("image",src)
<think>好的,用户现在的问题是安装了opencv-python但找不到opencv-contrib-python,需要解决方案。首先,我得回忆一下之前提供的解决方案,并结合用户这次提供的站内引用信息来调整回答。 用户提到引用了关于conda虚拟环境退出的部分,这可能意味着用户在使用虚拟环境,需要注意环境是否正确激活。然后,用户引用了安装opencv-python和contrib的本地下载方法,以及不同包的区别,特别是headless版本的问题。还有用户提到了安装时出现的ImportError,解决方案是使用opencv-contrib-python-headless一步安装。 现在用户的问题是安装了opencv-python但找不到contrib模块。根据之前的经验,常见原因是contrib没有安装,或者版本不匹配。用户可能只安装了opencv-python,而contrib需要单独安装,或者两者版本不一致导致冲突。 根据引用[3],opencv-pythonopencv-contrib-python不同的包,contrib包含额外的模块,比如人脸识别。所以如果只安装opencv-python,自然缺少contrib的模块。需要同时安装contrib包,并且版本要一致。 引用[4]提到安装时可能出现依赖问题,推荐使用opencv-contrib-python-headless来避免某些错误。所以可能需要建议用户安装这个包,而不是单独安装contrib。 另外,用户可能同时安装了opencv-pythonopencv-contrib-python,导致版本冲突。这时候需要卸载所有版本,再重新安装contrib的整合包。 还要考虑用户是否在正确的虚拟环境中操作,如果环境没激活,可能安装到了全局环境中,导致找不到模块。 总结解决方案步骤: 1. 检查当前环境是否正确,使用conda deactivate回到base,再进入目标环境。 2. 卸载现有的opencv相关包,避免冲突。 3. 安装opencv-contrib-python或headless版本,确保版本一致。 4. 验证安装是否成功,检查模块是否存在。 需要提醒用户注意版本兼容性,推荐指定版本号安装,比如4.5.5.64,以确保稳定性。同时,使用headless版本可能解决某些系统依赖问题,尤其是在无头环境中。 可能用户之前按照常见教程安装了opencv-python,但没有安装contrib,或者安装了但版本不对,导致找不到模块。需要明确说明两者的区别,以及正确的安装方法。另外,用户可能遇到环境问题,比如在错误的虚拟环境中安装,导致无法找到包,需要检查环境。</think>[解决方案分步说明] 1. **卸载冲突包并重新安装** - 同时安装$opencv-python$和$opencv-contrib-python$会导致文件覆盖,需统一用整合包: ```bash # 卸载所有opencv相关包 pip uninstall opencv-python opencv-contrib-python opencv-python-headless # 安装整合contrib模块的完整版(推荐两种方式) # 方式一:标准版(需要GUI支持) pip install opencv-contrib-python==4.5.5.64 # 方式二:无头版(服务器/无显示器环境适用)[^4] pip install opencv-contrib-python-headless==4.5.5.64 ``` 2. **验证模块加载** ```python >>> import cv2 >>> print(cv2.__version__) # 应显示4.5.x >>> print(cv2.face.LBPHFaceRecognizer_create()) # 测试contrib模块 # 成功则返回类似<cv2.face_LBPHFaceRecognizer object at 0x...> ``` 3. **虚拟环境专项检查** - 若使用conda环境,确认安装位置正确: ```bash conda activate 你的环境名称 # 确保在目标环境中操作 pip list | grep opencv # Linux/macOS pip list | findstr opencv # Windows ``` - 若环境路径错误,参考[^1]用`conda deactivate`重置环境 [版本冲突对照表] | 现象 | 原因 | 解决方案 | |------|------|----------| | `ModuleNotFoundError: No module named 'cv2.face'` | contrib未安装 | 执行上述步骤1 | | `cv2.face exists but function missing` | 版本API不兼容 | 固定版本为4.5.5.64 | | `ImportError: libGL.so.1缺失` | 系统依赖缺失 | 改用_headless版本[^4] | [技术原理说明] - $opencv-python$是仅包含基础模块的**精简版**,而$opencv-contrib-python$是包含`face`等300+扩展模块的**完整版**[^3] - 两者使用相同的命名空间$cv2$,因此同时安装会产生文件覆盖,必须**二选一**安装 - `-headless`版本移除了GUI相关功能(如`cv2.imshow()`),但体积更小且无需图形库依赖 [验证代码模板] ```python import cv2 def check_opencv_modules(): required = [ ('基础功能', lambda: cv2.__version__), ('contrib模块', lambda: cv2.face.LBPHFaceRecognizer_create()), ('深度学习', lambda: cv2.dnn.readNetFromONNX('test.onnx')) ] for name, test in required: try: test() print(f"√ {name} 正常") except AttributeError: print(f"× {name} 缺失:请检查contrib包安装") if __name__ == "__main__": check_opencv_modules() ``` --相关问题-- 1. 如何在Docker容器中正确配置OpenCV的contrib模块? 2. 使用_headless版本时如何处理图像显示需求? 3. 不同OpenCV版本对人脸识别精度有什么影响?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值