跳到主要内容OpenCV Python 基础入门教程 | 极客日志PythonAI算法
OpenCV Python 基础入门教程
综述由AI生成OpenCV 在 Python 环境下的基础使用方法。内容涵盖安装配置、图像与视频的读写及处理、绘图操作、像素级访问与修改、图像算术运算、色彩空间转换、几何变换、阈值处理以及模板匹配等核心技术。此外还补充了轮廓检测和形态学操作等实用章节。文章提供了完整的代码示例,旨在帮助初学者快速掌握计算机视觉库的基本技能,为后续深入学习算法打下基础。
指针猎手20 浏览 OpenCV Python 基础入门教程
一、简介
OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉库,最初由 C++ 编写,提供了 Python、Java 等语言的接口。它广泛应用于图像识别、视频分析、机器学习等领域。
二、安装
- Debian/Ubuntu 系系统
使用
apt 安装是最稳定的方式:
sudo apt install python3-opencv
在 UOS 系统上同样适用。支持 AMD、ARM、MIPS 架构。
- 安装 NumPy
NumPy 是 Python 中用于科学计算的核心库,OpenCV 的所有数组操作都基于 NumPy。
sudo apt -y install python3-numpy
虽然可以使用 pip 安装,但考虑到兼容性和稳定性,官方文档建议优先使用系统包管理器。
三、入门基础
所有 OpenCV 类和函数都在 cv2 模块下,导入时通常简写为 cv:
import cv2 as cv
import numpy as np
1. 图像操作
1.1 读取图像
img = cv.imread('path/to/image.jpg', flags=cv.IMREAD_COLOR)
- 参数 1:文件路径(字符串)。
- 参数 2:读取标志。
cv.IMREAD_COLOR:加载彩色图像,忽略 alpha 通道(默认值)。
cv.IMREAD_GRAYSCALE:加载灰度图像。
cv.IMREAD_UNCHANGED:加载包括 alpha 通道的图像。
- 也可用整数
1, 0, -1 代替。
1.2 显示图像
cv.imshow('Window Name', img)
- 参数 1:窗口名称(字符串)。
- 参数 2:图像对象。
销毁窗口:
cv.destroyAllWindows()
cv.destroyWindow('Window Name')
注意:显示窗口后通常需要配合 waitKey() 保持窗口打开。
1.3 保存图像
cv.imwrite('output.jpg', img)
2. 视频处理
2.1 摄像头捕获
cap = cv.VideoCapture(0)
if not cap.isOpened():
exit()
while True:
ret, frame = cap.read()
if not ret:
break
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
cv.imshow('frame', gray)
if cv.waitKey(1) == ord('q'):
break
cap.release()
cv.destroyAllWindows()
cap.read() 返回两个值:布尔值 ret(是否成功读取)和帧 frame。
cap.get(id) 获取视频属性(如帧率、宽高),id 范围通常为 0-18。
2.2 播放视频文件
cap = cv.VideoCapture('video.mp4')
2.3 保存视频
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
out.write(frame)
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
cap.release()
out.release()
cv.destroyAllWindows()
- 参数 1:文件名。
- 参数 2:编解码器代码(FourCC)。
- 参数 3:帧率。
- 参数 4:分辨率
(width, height)。
3. 绘图
3.1 画线
img = np.zeros((512, 512, 3), np.uint8)
cv.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
3.2 画圆
cv.circle(img, (center_x, center_y), radius, color, thickness)
3.3 画矩形
cv.rectangle(img, (top_left_x, top_left_y), (bottom_right_x, bottom_right_y), color, thickness)
四、核心功能
1. 图像基本操作
1.1 像素访问与修改
px = img[100, 100]
blue = img[100, 100, 0]
img[100, 100] = [255, 255, 255]
val = img.item(10, 10, 2)
img.itemset((10, 10, 2), 100)
1.2 图像属性
print(img.shape)
print(img.size)
print(img.dtype)
1.3 区域裁剪
ball = img[280:340, 330:390]
img[273:333, 100:160] = ball
1.4 通道分离与合并
b, g, r = cv.split(img)
img = cv.merge((b, g, r))
img[:, :, 2] = 0
2. 图像算术运算
2.1 图片相加
OpenCV 加法是饱和运算(超过 255 截断为 255),而 NumPy 是取模运算。
x = np.uint8([250])
y = np.uint8([10])
print(cv.add(x, y))
print(x + y)
2.2 图像混合
dst = cv.addWeighted(img1, 0.7, img2, 0.3, 0)
2.3 按位操作
img1 = cv.imread('messi5.jpg')
img2 = cv.imread('opencv-logo.png')
rows, cols, channels = img2.shape
roi = img1[0:rows, 0:cols]
img2gray = cv.cvtColor(img2, cv.COLOR_BGR2GRAY)
ret, mask = cv.threshold(img2gray, 10, 255, cv.THRESH_BINARY)
mask_inv = cv.bitwise_not(mask)
img1_bg = cv.bitwise_and(roi, roi, mask=mask_inv)
img2_fg = cv.bitwise_and(img2, img2, mask=mask)
dst = cv.add(img1_bg, img2_fg)
img1[0:rows, 0:cols] = dst
cv.imshow('res', img1)
cv.waitKey(0)
cv.destroyAllWindows()
五、图像处理进阶
1. 色彩空间转换
OpenCV 支持多种色彩空间转换,最常用的是 BGR 转灰度和 HSV。
1.1 灰度化
grey = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
灰度图能显著提高处理速度,适用于大多数特征提取场景。
1.2 HSV 空间
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
lower_blue = np.array([110, 50, 50])
upper_blue = np.array([130, 255, 255])
mask = cv.inRange(hsv, lower_blue, upper_blue)
res = cv.bitwise_and(frame, frame, mask=mask)
2. 几何变换
2.1 缩放
res = cv.resize(img, None, fx=2, fy=2, interpolation=cv.INTER_CUBIC)
插值方法可选 INTER_LINEAR(默认)、INTER_CUBIC 等。
2.2 旋转
rows, cols = img.shape
M = cv.getRotationMatrix2D(((cols-1)/2.0, (rows-1)/2.0), 90, 1)
dst = cv.warpAffine(img, M, (cols, rows))
3. 阈值处理
3.1 全局阈值
ret, thresh = cv.threshold(img, 127, 255, cv.THRESH_BINARY)
类型包括 THRESH_BINARY, THRESH_BINARY_INV, THRESH_TRUNC 等。
3.2 自适应阈值
th2 = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_MEAN_C,
cv.THRESH_BINARY, 11, 2)
th3 = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C,
cv.THRESH_BINARY, 11, 2)
4. 模板匹配
res = cv.matchTemplate(source, template, cv.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)
loc = np.where(res >= 0.8)
for pt in zip(*loc[::-1]):
cv.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
5. 轮廓检测(补充)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 127, 255, cv.THRESH_BINARY)
contours, hierarchy = cv.findContours(thresh, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
cv.drawContours(img, contours, -1, (0, 255, 0), 2)
6. 形态学操作(补充)
kernel = np.ones((5, 5), np.uint8)
dilated_img = cv.dilate(thresh, kernel, iterations=2)
eroded_img = cv.erode(thresh, kernel, iterations=1)
closed_img = cv.morphologyEx(thresh, cv.MORPH_CLOSE, kernel)
六、总结
本文介绍了 OpenCV 在 Python 中的基础应用,涵盖图像读写、视频处理、绘图、像素操作、色彩空间转换、几何变换及模板匹配等核心功能。通过掌握这些基础操作,可以进一步探索更复杂的计算机视觉任务,如人脸识别、目标跟踪等。建议在实际项目中多练习代码示例,熟悉 API 用法,并结合 NumPy 进行高效的数据处理。
相关免费在线工具
- 加密/解密文本
使用加密算法(如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