跳到主要内容OpenCV 基础教程:绘图、几何变换与图像运算 | 极客日志PythonAI算法
OpenCV 基础教程:绘图、几何变换与图像运算
OpenCV 基础篇涵盖图形绘制、几何变换、阈值处理及图像运算四大核心模块。通过 line、rectangle 等函数实现静态与动态绘图,利用 resize、warpAffine 完成缩放旋转透视,掌握 threshold 与 adaptiveThreshold 进行二值化分割,结合 mask 与位运算实现图像融合加密。适合初学者系统构建计算机视觉基础能力。
星星泡饭15 浏览 OpenCV 基础篇
本章将带你从'完全小白'进阶到能动手做真实项目。不堆术语、不讲空话,只用你能跑通的代码 + 能看懂的图解 + 踩过的坑总结,手把手拆解 OpenCV 的核心逻辑。
第 6 章 绘制图形和文字
OpenCV 提供了丰富的绘图方法,包括绘制线段的 line()、矩形的 rectangle()、圆形的 circle()、多边形的 polylines() 以及文字的 putText()。本章将依次讲解这些方法,并演示如何绘制相应的图形。

6.1 线段的绘制
使用 cv2.line() 即可绘制长短不一、粗细各异、五颜六色的线段。
img = cv2.line(img, pt1, pt2, color, thickness)
- img:画布。
- pt1:线段起点坐标。
- pt2:线段终点坐标。
- color:线条颜色(BGR 格式)。
- thickness:线条宽度。
注意:OpenCV 中图像通道顺序为 B→G→R,因此红色是 (0, 0, 255),而非 RGB 标准的 (255, 0, 0)。
示例:绘制线段拼成'王'字。

坐标形式为 (x, y),切勿混淆。
6.2 矩形的绘制
cv2.rectangle() 可绘制矩形边框或实心矩形。
img = cv2.rectangle(img, pt1, pt2, color, thickness)
- pt1:左上角坐标。
- pt2:右下角坐标。
- thickness:线条宽度。若设为
-1,则绘制实心矩形。
示例:绘制矩形边框及实心矩形。


6.3 圆形的绘制
cv2.circle() 用于绘制圆形边框或实心圆。
img = cv2.circle(img, center, radius, color, thickness)
6.4 多边形的绘制
cv2.polylines() 支持闭合或不闭合的多边形。
img = cv2.polylines(img, pts, isClosed, color, thickness)
- pts:顶点坐标列表(NumPy 数组)。
- isClosed:
True 表示闭合,False 表示不闭合。
注意:绘制多边形时,需按顺时针或逆时针顺序给出顶点坐标,否则无法正确闭合。
6.5 文字的绘制
cv2.putText() 可设置字体样式、大小、颜色及方向。
img = cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)
- text:要绘制的文字内容。
- org:左下角坐标。
- fontFace:字体样式(如
FONT_HERSHEY_SIMPLEX)。
- bottomLeftOrigin:控制文字方向,默认
False。
提示:仅使用 OpenCV 绘制中文会显示乱码,建议先转换为图片或使用其他库处理中文。
6.5.1 斜体效果
6.5.2 垂直镜像
设置 bottomLeftOrigin=True 可实现垂直镜像。
6.6 动态绘制图形
静态图形可以动起来吗?当然可以。以弹球动画为例,需要解决运动轨迹计算和动画帧率控制两个问题。
- 计算运动轨迹:通过改变速度正负号实现边界反弹。
- 实现动画:利用
time.sleep() 控制帧率,模拟 60fps 视觉效果。
6.7 小结
绘制图形需创建画布,注意颜色通道顺序 (B, G, R)。矩形、圆形和多边形可通过 thickness 参数控制边框或填充。多边形顶点需按顺序标记。此外,结合时间模块可实现动态绘图。
第 7 章 图像的几何变换
几何变换改变图像的大小、角度和形状,涉及缩放、翻转、映射和透视。OpenCV 将这些复杂计算封装为灵活的方法。
7.1 缩放
使用 cv2.resize() 更改图像大小比例。
dst = cv2.resize(src, dsize, fx, fy, interpolation)
- dsize:输出图像尺寸 (宽,高)。
- fx/fy:水平/垂直缩放比例。
- interpolation:插值方式。
7.1.1 指定尺寸缩放
7.1.2 比例缩放
设置 fx 和 fy,此时 dsize 需为 None。
7.2 翻转
dst = cv2.flip(src, flipCode)
- flipCode:
1 水平,-1 垂直,0 同时翻转。
7.3 仿射变换
保持直线平直性和平行性的二维变形,包含平移、旋转和倾斜。
dst = cv2.warpAffine(src, M, dsize, flags, borderMode, borderValue)
7.3.1 平移
M = [[1, 0, dx], [0, 1, dy]]
7.3.2 旋转
使用 cv2.getRotationMatrix2D() 自动计算矩阵。
M = cv2.getRotationMatrix2D(center, angle, scale)
7.3.3 倾斜
7.4 透视
dst = cv2.warpPerspective(src, M, dsize, flags, borderMode, borderValue)
使用 cv2.getPerspectiveTransform() 计算 3×3 矩阵。
7.5 小结
缩放可用 dsize 或 fx/fy;翻转由 flipCode 决定;仿射和透视均依赖矩阵 M。熟练掌握矩阵操作即可灵活进行几何变换。
第 8 章 图像的阈值处理
阈值类似'像素值的标准线',将像素分组并进行加深或变淡,使轮廓更鲜明。
8.1 阈值处理函数
retval, dst = cv2.threshold(src, thresh, maxval, type)
8.2 '非黑即白'的图像
8.2.1 二值化处理
8.2.2 反二值化处理
8.3 零处理
8.3.1 低于阈值零处理
8.3.2 超出阈值零处理
8.4 截断处理
8.5 自适应处理
色彩不均衡时,固定阈值效果不佳。自适应处理根据局部区域计算阈值。
dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
8.6 Otsu 方法
retval, dst = cv2.threshold(src, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
8.7 阈值处理的作用
二值图像忽略细节放大特征,适合识别算法。先转灰度再二值化,可获取物体轮廓。
8.8 小结
阈值是快速抠出主体线条的工具。自适应处理解决了明暗不均的问题,Otsu 方法自动优化阈值。
第 9 章 图像的运算
图像由像素组成,可进行数学运算,实现截取、合并等效果。
9.1 掩模
掩模(Mask)像手术洞巾,仅暴露感兴趣区域(ROI)。二值图像中,0 表示遮盖,255 表示暴露。
9.2 图像的加法运算
使用 cv2.add() 而非 + 运算符,避免溢出取模。
dst = cv2.add(src1, src2, mask, dtype)
9.3 图像的位运算
9.3.1 按位与
dst = cv2.bitwise_and(src1, src2, mask)
9.3.2 按位或
dst = cv2.bitwise_or(src1, src2, mask)
9.3.3 按位取反
dst = cv2.bitwise_not(src, mask)
9.3.4 按位异或
dst = cv2.bitwise_xor(src, mask)
9.4 合并图像
9.4.1 加权和
dst = cv2.addWeighted(src1, alpha, src2, beta, gamma)
9.4.2 覆盖
直接赋值像素值。若前景含 Alpha 通道,需排除透明像素。
9.5 小结
明确掩模中 0 和 255 的作用。掌握掩模在加法和位运算中的应用,如图像加密。熟练运用加权和与覆盖两种方式合并图像。
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online