当前位置: 首页 > news >正文

OpenCV(cv2)学习笔记:从模板匹配入门到常用函数

1️⃣ 什么是 OpenCV (cv2)

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,提供了图像处理、视频分析、机器视觉、特征识别等功能。
在 Python 中,使用 cv2 模块来调用 OpenCV 的各种函数。

特点:

  • 强大:涵盖图像读取、编辑、特征检测、机器学习等。
  • 跨平台:支持 Windows、Linux、macOS。
  • 易用:与 NumPy 紧密结合,图像直接以 numpy.ndarray(数组/矩阵)形式存储。

2️⃣ 模板匹配案例

模板匹配是一种在大图中寻找小图的经典方法。
我们的目标是:给定一张模板图(template),在目标图像(image)中找到它出现的位置,并用绿色矩形标记出来。

完整代码(详细注释版)

import cv2   # 导入 OpenCV 库,用于图像处理和计算机视觉# 1. 读取原图像(待搜索的图像)
kele = cv2.imread('image.png')   # 从文件读取图像,返回 NumPy 数组(BGR 格式)
cv2.imshow('kele', kele)         # 显示原图
cv2.waitKey(0)                   # 等待用户按下任意键,按键后窗口才会响应# 2. 读取模板图像(要找的小图)
template = cv2.imread('template.png')
cv2.imshow('template', template)
cv2.waitKey(0)# 3. 获取模板的尺寸(高 h,宽 w)
h, w = template.shape[:2]        # shape[0] 是高度,shape[1] 是宽度# 4. 进行模板匹配
# TM_CCOEFF_NORMED:归一化相关系数匹配法,匹配度越高值越接近 1
res = cv2.matchTemplate(kele, template, cv2.TM_CCOEFF_NORMED)# 5. 获取匹配结果中的最大值、最小值及对应的位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# min_val:最小匹配值
# max_val:最大匹配值
# min_loc:最小值的位置 (x, y)
# max_loc:最大值的位置 (x, y)# 6. 确定最佳匹配区域
top_left = max_loc   # TM_CCOEFF_NORMED 是"值越大越相似",所以取 max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)# 7. 在原图上绘制绿色矩形框
kele_template = cv2.rectangle(kele, top_left, bottom_right, (0, 255, 0), 2)
# 参数:
# - (0, 255, 0):绿色 (BGR)
# - 2:线条宽度# 8. 显示结果
cv2.imshow('kele_template', kele_template)
cv2.waitKey(0)

运行效果:

程序会依次弹出三个窗口:

  1. 显示原图 kele
  2. 显示模板图 template
  3. 在原图中绘制绿色矩形框标记匹配区域

3️⃣ 核心函数讲解

图像读写与显示

函数作用常用参数
cv2.imread(path, flags)读取图像flags: cv2.IMREAD_COLOR(默认彩色)、cv2.IMREAD_GRAYSCALE(灰度)
cv2.imwrite(path, img)保存图像文件路径
cv2.imshow(winname, img)显示图像窗口winname 为窗口名
cv2.waitKey(delay)等待键盘事件delay=0 表示无限等待,单位:毫秒
cv2.destroyAllWindows()关闭所有窗口

图像属性

img.shape  # (height, width, channels)
img.size   # 图像像素总数
img.dtype  # 图像数据类型(如 uint8)

绘图函数

函数作用
cv2.line(img, pt1, pt2, color, thickness)画线
cv2.rectangle(img, pt1, pt2, color, thickness)画矩形
cv2.circle(img, center, radius, color, thickness)画圆
cv2.putText(img, text, org, font, scale, color, thickness)绘制文字

模板匹配

函数作用
cv2.matchTemplate(image, templ, method)计算模板在图像中每个位置的匹配度
cv2.minMaxLoc(src)返回最小值、最大值及其坐标
常用匹配方法:
  • cv2.TM_SQDIFF:平方差匹配(越小越相似)
  • cv2.TM_CCORR_NORMED:归一化相关匹配(越大越相似)
  • cv2.TM_CCOEFF_NORMED:归一化相关系数匹配(越大越相似)

4️⃣ OpenCV 与 NumPy 的关系

OpenCV 中的图像对象是一个 NumPy 数组:

可以用数组切片直接操作像素:

pixel = img[100, 200]      # 获取 (y=100, x=200) 像素 [B, G, R]
blue_channel = img[:, :, 0]  # 获取蓝色通道

可以直接使用 NumPy 的数学运算,如平均值、标准差:

import numpy as np
mean_brightness = np.mean(img)

5️⃣ 经验总结

  1. cv2.imshow() 只是提交图像数据,必须配合 cv2.waitKey() 才能真正显示。
  2. 读取彩色图像时,OpenCV 默认是 BGR 而不是 RGB。
  3. 模板匹配适合小目标、光照变化不大的场景;更复杂的情况建议使用特征匹配(如 SIFT、ORB)。

文章转载自:

http://lHyT6Wli.sqgqh.cn
http://gmtAtrz1.sqgqh.cn
http://TgczFlEw.sqgqh.cn
http://xo1Z5Ss4.sqgqh.cn
http://BaoxCSC4.sqgqh.cn
http://8ZOD6Q5A.sqgqh.cn
http://zY9k5BRf.sqgqh.cn
http://GbJNVw1u.sqgqh.cn
http://woOHzQs7.sqgqh.cn
http://IBBEw6CC.sqgqh.cn
http://iQLlaSp0.sqgqh.cn
http://31Wu2Uy0.sqgqh.cn
http://AraHuIr0.sqgqh.cn
http://2fXJa8zO.sqgqh.cn
http://QvmoaOyu.sqgqh.cn
http://e5spDw4B.sqgqh.cn
http://fDUExCOn.sqgqh.cn
http://UyvwW9Nd.sqgqh.cn
http://XFN436Xc.sqgqh.cn
http://6aFTqW5f.sqgqh.cn
http://APgf3VWY.sqgqh.cn
http://KBSJTSDB.sqgqh.cn
http://Apaid40k.sqgqh.cn
http://KVCNq48s.sqgqh.cn
http://GYSVWIYP.sqgqh.cn
http://OA1XI8AF.sqgqh.cn
http://BmQ1THrC.sqgqh.cn
http://tw6QbSHI.sqgqh.cn
http://YVlwa3OG.sqgqh.cn
http://ZzPxsDSs.sqgqh.cn
http://www.dtcms.com/a/381582.html

相关文章:

  • FFmpeg合成mp4
  • 解决 ubuntu 重启串口号变化
  • 《算法与数据结构》第六章[第3节]:二叉树(第二部分)
  • 深入理解 Python 中的 `__call__` 方法
  • AI 智能体的定义与演进
  • 鸿蒙Next ArkWeb网页交互管理:从基础到高级实战
  • 给CentOS的虚拟机扩容
  • Redis 持久化:RDB 和 AOF 的 “爱恨情仇”
  • 多源最短路(Floyd算法
  • 【数据结构——图(例图篇)】
  • 安卓俄罗斯方块,经典拖动双模式体验
  • 21th cpp think
  • 收集飞花令碎片——C语言关键字typedef
  • Python/JS/Go/Java同步学习(第十二篇)四语言“字符串填充编号“对照表: 财务“小南“纸式填充术加凭证编号崩溃(附源码/截图/参数表/避坑指南)
  • 工具变量-5G试点城市DID数据(2014-2025年
  • 金融数学专业需要学哪些数学和编程内容?
  • 【算法】【链表】148.排序链表--通俗讲解
  • Linux 内核镜像与启动组件全解析:从 vmlinux 到 extlinux.conf
  • HIS架构智能化升级编程路径:从底层原理到临床实践的深度解析(上)
  • leetcode-加油站
  • Coze源码分析-资源库-创建知识库-前端源码-总结
  • 【PHP7内核剖析】-1.2 执行流程
  • Java 多线程进阶(四)-- 锁策略,CAS,synchronized的原理,JUC当中常见的类
  • 从ENIAC到Linux:计算机技术与商业模式的协同演进
  • UE5版本Windows构建pc平台报错googletest的问题记录
  • 【LeetCode】杨辉三角,轮转数组,洗牌算法
  • 5.Three.js 学习(基础+实践)
  • 在 React 中如何使用 useMemo 和 useCallback 优化性能?
  • C++20多线程新特性:更安全高效的并发编程
  • 结构光三维重建原理详解(1)