OpenCV Core 模块的详细使用指南,结合基础操作、代码示例及应用场景
·
OpenCV Core 模块核心类与函数全解析
一、核心数据结构
1. Mat(矩阵 / 图像存储)
功能
OpenCV 中存储图像、矩阵的核心数据结构,支持多维数组操作,包含以下核心属性:
| 属性 | 说明 | 示例 |
|---|---|---|
shape |
尺寸(高度,宽度,通道数) | (480, 640, 3)(3 通道图像) |
dtype |
数据类型(如 np.uint8) |
uint8(图像常用类型) |
size |
总元素数(高度 × 宽度 × 通道数) | 480×640×3 = 921,600 |
channels |
通道数(1 或 3) | 1(灰度图)、3(BGR) |
创建方式
python
# 1. 空 Mat(未初始化)
mat_empty = cv2.Mat()
# 2. 全零矩阵(300×400,3 通道 uint8)
mat_zeros = np.zeros((300, 400, 3), dtype=np.uint8) # 等价于 cv2.Mat(300, 400, cv2.CV_8UC3)
# 3. 从图像文件读取
img = cv2.imread("image.jpg") # BGR 格式,自动创建 Mat
# 4. 自定义数据(float32 矩阵)
mat_float = np.array([[1.0, 2.0], [3.0, 4.0]], dtype=np.float32)
内存管理
- 浅拷贝(视图):
roi = img[100:200, 200:400](共享数据,无内存复制)。 - 深拷贝:
mat_copy = img.copy()(独立内存)。
应用场景
- 图像裁剪、像素操作(如医学影像 ROI 提取)。
- 矩阵运算(如图像滤波、深度学习预处理)。
2. Scalar(颜色 / 像素值)
功能
表示多通道值(如 BGR 颜色、像素值),支持以下操作:
| 用法 | 说明 | 示例 |
|---|---|---|
Scalar(b, g, r) |
BGR 颜色(0-255) | Scalar(255, 0, 0)(蓝色) |
Scalar(val) |
单通道值(灰度) | Scalar(127)(灰色) |
cv2.mean(mat) |
计算矩阵均值(返回 Scalar) | mean_bgr = cv2.mean(img) |
代码示例
python
# 设置 ROI 颜色(蓝色)
roi = img[100:200, 200:400]
roi[:] = cv2.Scalar(255, 0, 0) # BGR 格式
# 计算图像均值
mean_b, mean_g, mean_r, _ = cv2.mean(img)
print(f"BGR 均值: ({mean_b}, {mean_g}, {mean_r})")
应用场景
- 图像颜色设置(如 ROI 染色)。
- 像素值初始化(如创建纯色背景)。
3. Point/Size/Rect(几何结构)
功能与用法
| 结构 | 说明 | 示例 |
|---|---|---|
Point(x, y) |
二维点(坐标) | Point(100, 200)(x=100, y=200) |
Size(w, h) |
尺寸(宽度,高度) | Size(200, 150)(宽 200, 高 150) |
Rect(x, y, w, h) |
矩形(起点 + 尺寸) | Rect(50, 50, 200, 150)(x=50, y=50, 宽高 200×150) |
代码示例
python
# 绘制矩形(使用 Rect)
rect = cv2.Rect(50, 50, 200, 150)
cv2.rectangle(img, rect, (0, 255, 0), 2) # 绿色矩形
# 计算点距离
p1 = cv2.Point(100, 100)
p2 = cv2.Point(200, 200)
distance = np.sqrt((p2.x - p1.x)**2 + (p2.y - p1.y)**2) # 欧氏距离
应用场景
- 目标边界框标注(如人脸检测框)。
- 图像区域定义(如 ROI 裁剪)。
二、核心绘图函数
1. 几何图形绘制
| 函数 | 功能 | 核心参数说明 | 示例代码 |
|---|---|---|---|
cv2.line() |
绘制直线 | pt1, pt2(起点 / 终点), color, thickness |
cv2.line(img, (0,0), (640,480), (0,255,0), 2) |
cv2.circle() |
绘制圆形 | center(圆心), radius, color, thickness(-1 填充) |
cv2.circle(img, (320, 240), 50, (0,0,255), -1) |
cv2.rectangle() |
绘制矩形 | pt1, pt2(左上角 / 右下角), color, thickness |
cv2.rectangle(img, (100,100), (200,200), (255,0,0), 2) |
cv2.ellipse() |
绘制椭圆 | center, axes(长 / 短轴), angle(旋转角度) |
cv2.ellipse(img, (300,300), (100,50), 45, 0, 360, (0,255,255), 2) |
cv2.polylines() |
绘制多边形 | pts(顶点列表), isClosed(是否闭合) |
cv2.polylines(img, [pts], True, (255,255,0), 2) |
抗锯齿优化
使用 cv2.LINE_AA 提升图形质量:
python
cv2.line(img, (50, 50), (550, 50), (0, 255, 0), 2, cv2.LINE_AA) # 抗锯齿直线
2. 文本绘制
| 函数 | 功能 | 核心参数说明 | 示例代码 |
|---|---|---|---|
cv2.putText() |
绘制文本 | text(内容), org(位置), fontFace, fontScale, color |
cv2.putText(img, "OpenCV", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 2) |
字体支持
常用字体:FONT_HERSHEY_SIMPLEX(简单字体)、FONT_HERSHEY_TRIPLEX(复杂字体)。
三、应用场景与完整示例
场景 1:医学影像 ROI 标注与测量
流程
- 读取影像 → 2. 裁剪 ROI → 3. 绘制标注 → 4. 测量尺寸。
完整代码
python
import cv2
import numpy as np
# 1. 读取医学影像(CT 灰度图)
ct_scan = cv2.imread("ct_scan.png", cv2.IMREAD_GRAYSCALE)
# 2. 定义 ROI(假设坐标:x=200, y=150, 宽=100, 高=120)
roi_rect = cv2.Rect(200, 150, 100, 120)
roi = ct_scan[roi_rect.y:roi_rect.y+roi_rect.height, roi_rect.x:roi_rect.x+roi_rect.width]
# 3. 标注原图
ct_scan_color = cv2.cvtColor(ct_scan, cv2.COLOR_GRAYTOBGR)
cv2.rectangle(ct_scan_color, roi_rect, (0, 255, 0), 2) # 绿色矩形
cv2.putText(ct_scan_color, "Tumor ROI", (roi_rect.x, roi_rect.y-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
# 4. 测量尺寸
roi_size = roi.shape[::-1] # (宽度, 高度)
cv2.putText(ct_scan_color, f"Size: {roi_size[0]}x{roi_size[1]} px",
(roi_rect.x, roi_rect.y + roi_rect.height + 20),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
# 显示结果
cv2.imshow("Medical ROI Analysis", ct_scan_color)
cv2.waitKey(0)
场景 2:工业零件缺陷标注
流程
- 检测轮廓 → 2. 绘制轮廓 → 3. 标注尺寸 → 4. 标记缺陷。
完整代码
python
import cv2
import numpy as np
# 1. 读取零件图像
part_img = cv2.imread("industrial_part.jpg")
gray = cv2.cvtColor(part_img, cv2.COLOR_BGR2GRAY)
# 2. 检测轮廓
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 3. 标注轮廓与尺寸
for cnt in contours:
rect = cv2.boundingRect(cnt) # 边界矩形
x, y, w, h = rect
# 绘制矩形
cv2.rectangle(part_img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 标注尺寸
cv2.putText(part_img, f"{w}x{h} px", (x, y-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
# 4. 显示结果
cv2.imshow("Industrial Part Inspection", part_img)
cv2.waitKey(0)
场景 3:交互式图像标注工具
流程
- 鼠标绘制矩形 → 2. 实时预览 → 3. 保存 ROI。
完整代码
python
import cv2
import numpy as np
drawing = False
start_rect = (-1, -1)
def mouse_callback(event, x, y, flags, param):
global drawing, start_rect
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
start_rect = (x, y)
elif event == cv2.EVENT_MOUSEMOVE and drawing:
# 实时绘制预览
img_copy = param.copy()
cv2.rectangle(img_copy, start_rect, (x, y), (0, 255, 0), 2)
cv2.imshow("Annotator", img_copy)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
x1, y1 = start_rect
x2, y2 = x, y
rect = cv2.Rect(min(x1, x2), min(y1, y2), abs(x2-x1), abs(y2-y1))
# 保存 ROI
roi = param[rect.y:rect.y+rect.height, rect.x:rect.x+rect.width]
cv2.imwrite("roi.jpg", roi)
print(f"ROI 保存:{rect.x}, {rect.y}, {rect.width}, {rect.height}")
# 初始化
img = cv2.imread("scene.jpg")
cv2.namedWindow("Annotator")
cv2.setMouseCallback("Annotator", mouse_callback, img)
while True:
cv2.imshow("Annotator", img)
if cv2.waitKey(1) & 0xFF == 27: # ESC 退出
break
cv2.destroyAllWindows()
四、最佳实践与注意事项
1. 内存优化
- 浅拷贝优先:使用 ROI 切片(
img[roi])避免深拷贝。 - 大矩阵分块:处理 10k×10k 图像时,分块尺寸建议 512×512。
2. 颜色空间注意事项
- OpenCV 默认使用 BGR 格式(与 matplotlib 的 RGB 不同)。
- 保存 / 显示前确保颜色空间正确(如
cvtColor(img, COLOR_BGR2RGB))。
3. 绘图优化
- 抗锯齿:所有绘图函数添加
cv2.LINE_AA(如cv2.circle(..., lineType=cv2.LINE_AA))。 - 批量绘制:合并多个绘图操作后再
imshow(),减少渲染开销。
4. 数据类型选择
| 场景 | 推荐类型 | 原因 |
|---|---|---|
| 图像存储 | uint8 |
节省内存(1 字节 / 像素) |
| 数值计算(如深度学习) | float32 |
速度比 float64 快 2 倍,内存节省 50% |
| 高精度计算 | float64 |
15 位有效数字(如科学计算) |
五、总结图示
plaintext
Core 模块核心类与函数
├─ Mat(图像/矩阵)
│ ├─ 属性:shape, dtype, size
│ ├─ 操作:ROI 切片、像素访问、类型转换
│ └─ 内存:浅拷贝(视图) vs 深拷贝(copy())
├─ Scalar(颜色/值)
│ └─ 用法:BGR 颜色设置、均值计算
├─ Point/Size/Rect(几何结构)
│ └─ 应用:边界框、区域定义
├─ 绘图函数
│ ├─ 几何:line/circle/rectangle(抗锯齿)
│ └─ 文本:putText(支持多字体)
└─ 应用场景
├─ 医学影像:ROI 标注与测量
├─ 工业检测:轮廓绘制与尺寸标注
└─ 交互式工具:实时 ROI 绘制与保存
六、完整代码仓库(示例)
python
# Core 模块核心功能整合示例
import cv2
import numpy as np
# 1. Mat 操作
img = cv2.imread("lena.jpg")
roi = img[100:300, 200:400] # ROI 切片(浅拷贝)
# 2. Scalar 应用
roi[:] = cv2.Scalar(0, 255, 0) # 设置 ROI 为绿色
# 3. 几何结构
point = cv2.Point(320, 240)
size = cv2.Size(200, 150)
rect = cv2.Rect(point.x - size.width//2, point.y - size.height//2, size.width, size.height)
# 4. 绘图函数
cv2.circle(img, point, size.width//2, (0, 0, 255), 2, cv2.LINE_AA) # 红色圆圈
cv2.rectangle(img, rect, (255, 0, 0), 2) # 蓝色矩形
cv2.putText(img, "Core Demo", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1.2, (255, 255, 255), 2)
# 显示结果
cv2.imshow("Core Functions", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
功能完整用例
python
import cv2
import numpy as np
# ======================
# 一、Mat 数据结构操作
# ======================
# 1. Mat 创建与属性
# 创建空 Mat(未初始化)
mat_empty = cv2.Mat()
# 创建 300x400 黑色图像(3 通道,uint8)
img = np.zeros((300, 400, 3), dtype=np.uint8) # shape: (高度, 宽度, 通道数)
print(f"Mat 尺寸: {img.shape}") # (300, 400, 3)
print(f"数据类型: {img.dtype}") # uint8
# 从文件读取图像(BGR 格式)
lena = cv2.imread("lena.jpg") # 替换为实际图像路径
if lena is None:
raise FileNotFoundError("请确保图像文件存在")
# 2. 像素访问与修改
# 灰度转换
gray = cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)
# 访问单像素(行 100,列 200)
pixel_gray = gray[100, 200] # 灰度值(0-255)
print(f"灰度像素值: {pixel_gray}")
# 修改 BGR 像素(蓝色通道置 255)
lena[100, 200] = [255, 0, 0] # BGR 格式:(蓝, 绿, 红)
# 批量修改(所有像素绿色通道加 50)
lena[:, :, 1] = np.clip(lena[:, :, 1] + 50, 0, 255) # 向量化操作
# 3. ROI(区域操作)
# 裁剪 ROI(行 100-200,列 150-250)
roi = lena[100:200, 150:250]
# 复制 ROI 到新区域(浅拷贝,共享数据)
lena[250:350, 300:400] = roi
# 统计 ROI 均值(BGR)
mean_b, mean_g, mean_r, _ = cv2.mean(roi)
print(f"ROI 均值 (BGR): ({mean_b:.1f}, {mean_g:.1f}, {mean_r:.1f})")
# ======================
# 二、绘图函数(几何图形与文本)
# ======================
# 创建白色画布(400x600,3 通道)
canvas = np.ones((400, 600, 3), dtype=np.uint8) * 255 # 白色背景
# 1. 绘制基本图形
# 直线(绿色,抗锯齿)
cv2.line(
canvas, (50, 50), (550, 50), # 起点、终点
(0, 255, 0), 2, # 颜色(BGR)、线宽
cv2.LINE_AA # 抗锯齿
)
# 圆形(红色实心)
cv2.circle(
canvas, (300, 200), 80, # 圆心、半径
(0, 0, 255), -1 # 颜色、线宽(-1 表示填充)
)
# 矩形(蓝色空心)
cv2.rectangle(
canvas, (100, 100), (200, 200), # 左上角、右下角
(255, 0, 0), 2 # 颜色、线宽
)
# 椭圆(黄色,45° 旋转)
cv2.ellipse(
canvas, (300, 300), (100, 50), 45, 0, 360, # 中心、轴长、旋转角度、起始/结束角度
(0, 255, 255), 2 # 颜色、线宽
)
# 2. 绘制文本与多边形
# 文本(白色,抗锯齿)
cv2.putText(
canvas, "OpenCV Core", (50, 350), # 文本内容、位置
cv2.FONT_HERSHEY_SIMPLEX, 1.2, # 字体、尺寸
(255, 255, 255), 2, cv2.LINE_AA # 颜色、线宽、抗锯齿
)
# 多边形(黄色五星)
pts = np.array([[150, 100], [200, 150], [250, 100], [220, 50], [180, 50]], dtype=np.int32)
cv2.fillPoly(canvas, [pts], (0, 255, 255)) # 填充多边形
# 显示绘图结果
cv2.imshow("Drawing Demo", canvas)
# ======================
# 三、矩阵运算与数据类型
# ======================
# 1. 算术运算(饱和处理)
a = np.array([[100, 200], [250, 300]], dtype=np.uint8)
b = np.array([[50, 100], [200, 250]], dtype=np.uint8)
add_result = cv2.add(a, b) # 饱和加法:200+100=300 → 255(uint8 溢出处理)
print(f"加法结果: {add_result}") # [[150 255] [255 255]]
# 2. 逻辑运算(二值化)
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 灰度图二值化
# 3. 数据类型转换(float32 优化)
img_float = lena.astype(np.float32) / 255.0 # 归一化到 [0, 1]
sqrt_result = cv2.sqrt(img_float) # 平方根运算(浮点优化)
# 转换回 uint8 显示
img_uint8 = (sqrt_result * 255).astype(np.uint8)
cv2.imshow("Float32 Demo", img_uint8)
# ======================
# 四、内存管理与性能优化
# ======================
# 1. 浅拷贝 vs 深拷贝
mat = np.array([[1, 2], [3, 4]], dtype=np.float32)
view = mat[1:, :] # 浅拷贝(共享数据)
copy = mat.copy() # 深拷贝(独立内存)
view[0, 0] = 999 # 修改视图影响原矩阵
print(f"原矩阵值: {mat[1, 0]}") # 999(浅拷贝共享数据)
# 2. 大矩阵分块处理(避免内存溢出)
large_img = np.zeros((10000, 10000), dtype=np.uint8) # 模拟 10000x10000 大图像
tile_size = 1000
for i in range(0, large_img.shape[0], tile_size):
for j in range(0, large_img.shape[1], tile_size):
tile = large_img[i:i+tile_size, j:j+tile_size]
tile = cv2.GaussianBlur(tile, (5, 5), 0) # 分块降噪
large_img[i:i+tile_size, j:j+tile_size] = tile # 写回
# ======================
# 五、完整示例:图像混合与 ROI 分析
# ======================
# 1. 图像混合(alpha 融合)
background = cv2.imread("background.jpg") # 替换为实际背景图
foreground = cv2.imread("foreground.png") # 替换为实际前景图
# 调整尺寸一致
foreground = cv2.resize(foreground, (background.shape[1], background.shape[0]))
# 混合(alpha=0.7)
mixed = cv2.addWeighted(background, 0.7, foreground, 0.3, 0)
# 2. ROI 处理(增强对比度)
h, w = mixed.shape[:2]
roi = mixed[h//3:2*h//3, w//3:2*w//3] # 中心 ROI
# 对比度增强(alpha=1.5, beta=20)
roi_enhanced = cv2.convertScaleAbs(roi, alpha=1.5, beta=20)
mixed[h//3:2*h//3, w//3:2*w//3] = roi_enhanced # 写回原图
# 3. 标注结果
cv2.rectangle(mixed, (w//3, h//3), (2*w//3, 2*h//3), (0, 255, 0), 2)
cv2.putText(mixed, "Enhanced ROI", (w//3, h//3-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2)
cv2.imshow("Image Mixing", mixed)
# ======================
# 六、实时视频粒子特效(Mat 绘图实战)
# ======================
class ParticleSystem:
def __init__(self, width, height, num_particles=500):
self.width = width
self.height = height
self.particles = self._create_particles(num_particles)
def _create_particles(self, num):
"""创建粒子(随机位置、速度)"""
particles = []
for _ in range(num):
x = random.randint(0, self.width)
y = random.randint(0, self.height)
vx = random.uniform(-2, 2)
vy = random.uniform(-2, 2)
particles.append({"x": x, "y": y, "vx": vx, "vy": vy})
return particles
def update_particles(self):
"""更新粒子位置(边界反弹)"""
for p in self.particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
# 边界检测(弹性碰撞)
if p["x"] < 0 or p["x"] > self.width: p["vx"] *= -1
if p["y"] < 0 or p["y"] > self.height: p["vy"] *= -1
def draw_particles(self, frame):
"""绘制粒子(绿色实心圆)"""
for p in self.particles:
cv2.circle(frame, (int(p["x"]), int(p["y"])), 2, (0, 255, 0), -1)
# 初始化视频捕获
cap = cv2.VideoCapture(0)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
particle_system = ParticleSystem(width, height)
while cap.isOpened():
ret, frame = cap.read()
if not ret: break
# 更新并绘制粒子
particle_system.update_particles()
particle_system.draw_particles(frame)
# 显示 FPS
fps = cap.get(cv2.CAP_PROP_FPS)
cv2.putText(frame, f"FPS: {int(fps)}", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow("Particle Effect", frame)
if cv2.waitKey(1) & 0xFF == 27: # ESC 退出
break
cap.release()
# ======================
# 七、核心功能总结(注释说明)
# ======================
"""
1. Mat 数据结构:
- 存储图像/矩阵的核心结构,支持多维数组操作。
- 属性:shape(尺寸)、dtype(数据类型)、size(总元素数)。
- 创建方式:np.zeros()、cv2.imread()、切片操作等。
2. 像素操作:
- 访问:mat[row, col](行优先)。
- 修改:支持单像素和批量向量化操作(避免循环)。
3. 绘图函数:
- 几何图形:line()、circle()、rectangle() 等,支持抗锯齿(LINE_AA)。
- 文本:putText(),支持多种字体和样式。
4. 矩阵运算:
- 算术:add()、subtract()(饱和处理防止溢出)。
- 逻辑:threshold()、bitwise_and() 等。
- 数据类型:float32 优化(比 float64 快 2 倍)。
5. 内存管理:
- 浅拷贝(切片):共享数据,适合大矩阵操作。
- 深拷贝(copy()):独立内存,适合数据隔离。
6. ROI 操作:
- 高效裁剪与处理,支持医学影像、目标检测等场景。
7. 性能优化:
- 向量化操作替代循环。
- 分块处理大尺寸图像(避免内存溢出)。
"""
# 等待所有窗口关闭
cv2.waitKey(0)
cv2.destroyAllWindows()
代码说明与注释规范
- 模块导入:明确导入所需库(
cv2,numpy)。 - Mat 创建:演示多种 Mat 创建方式(空 Mat、全零矩阵、图像读取)。
- 像素操作:单像素访问、批量修改(向量化操作)。
- 绘图函数:详细注释每个绘图函数的参数含义(如颜色格式 BGR、抗锯齿)。
- 矩阵运算:对比不同数据类型的运算差异(
uint8饱和处理 vsfloat32浮点运算)。 - 内存管理:区分浅拷贝与深拷贝的应用场景。
- 综合示例:图像混合、ROI 处理、实时粒子特效,展示 Core 模块的实际应用。
- 类封装:粒子系统类(
ParticleSystem)演示面向对象的 Core 功能集成。 - 注释规范:
- 模块级注释:说明功能模块。
- 函数级注释:解释参数、返回值和功能。
- 关键代码注释:说明核心操作的目的(如抗锯齿、数据类型转换)。
运行说明
-
环境依赖:
bash
pip install opencv-python numpy -
资源准备:
- 准备测试图像(如
lena.jpg,background.jpg,foreground.png)。 - 确保摄像头可用(粒子特效示例)。
- 准备测试图像(如
-
功能测试:
- 运行代码,观察各窗口输出(绘图、图像混合、粒子特效)。
- 控制台输出:Mat 属性、像素值、运算结果等。
核心知识点标注(代码注释)
python
# 关键知识点 1:Mat 数据结构(shape/dtype)
img = np.zeros((300, 400, 3), dtype=np.uint8) # (高度, 宽度, 通道数), uint8 类型
# 关键知识点 2:像素访问(行优先)
lena[100, 200] = [255, 0, 0] # BGR 格式(蓝, 绿, 红)
# 关键知识点 3:ROI 浅拷贝(无内存复制)
roi = lena[100:200, 150:250] # 裁剪区域,共享原数据内存
# 关键知识点 4:绘图抗锯齿
cv2.line(canvas, (50, 50), (550, 50), (0, 255, 0), 2, cv2.LINE_AA) # 抗锯齿直线
# 关键知识点 5:float32 优化
img_float = lena.astype(np.float32) / 255.0 # 归一化到 [0, 1],加速浮点运算
# 关键知识点 6:内存管理(浅拷贝 vs 深拷贝)
view = mat[1:, :] # 浅拷贝(共享数据)
copy = mat.copy() # 深拷贝(独立内存)
# 关键知识点 7:向量化操作(批量处理)
lena[:, :, 1] += 50 # 所有像素绿色通道加 50(向量化,非循环)
代码特点
- 完整性:包含从基础操作到复杂应用的全流程代码。
- 可读性:清晰的代码结构(模块化注释),关键操作标注知识点。
- 实践性:包含图像混合、实时特效等真实场景应用。
- 鲁棒性:添加图像读取错误检查(
if lena is None)。 - 性能优化:展示 float32 优化、向量化操作、分块处理等技巧。
通过此代码,可全面掌握 OpenCV Core 模块的核心功能,为计算机视觉项目奠定坚实基础。每个代码段均可独立运行,方便按需复用。
更多推荐


所有评论(0)