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(起点 / 终点), colorthickness cv2.line(img, (0,0), (640,480), (0,255,0), 2)
cv2.circle() 绘制圆形 center(圆心), radiuscolorthickness(-1 填充) cv2.circle(img, (320, 240), 50, (0,0,255), -1)
cv2.rectangle() 绘制矩形 pt1, pt2(左上角 / 右下角), colorthickness cv2.rectangle(img, (100,100), (200,200), (255,0,0), 2)
cv2.ellipse() 绘制椭圆 centeraxes(长 / 短轴), 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(位置), fontFacefontScalecolor cv2.putText(img, "OpenCV", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,255), 2)
字体支持

常用字体:FONT_HERSHEY_SIMPLEX(简单字体)、FONT_HERSHEY_TRIPLEX(复杂字体)。

三、应用场景与完整示例

场景 1:医学影像 ROI 标注与测量

流程

  1. 读取影像 → 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:工业零件缺陷标注

流程

  1. 检测轮廓 → 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:交互式图像标注工具

流程

  1. 鼠标绘制矩形 → 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()

代码说明与注释规范

  1. 模块导入:明确导入所需库(cv2numpy)。
  2. Mat 创建:演示多种 Mat 创建方式(空 Mat、全零矩阵、图像读取)。
  3. 像素操作:单像素访问、批量修改(向量化操作)。
  4. 绘图函数:详细注释每个绘图函数的参数含义(如颜色格式 BGR、抗锯齿)。
  5. 矩阵运算:对比不同数据类型的运算差异(uint8 饱和处理 vs float32 浮点运算)。
  6. 内存管理:区分浅拷贝与深拷贝的应用场景。
  7. 综合示例:图像混合、ROI 处理、实时粒子特效,展示 Core 模块的实际应用。
  8. 类封装:粒子系统类(ParticleSystem)演示面向对象的 Core 功能集成。
  9. 注释规范
    • 模块级注释:说明功能模块。
    • 函数级注释:解释参数、返回值和功能。
    • 关键代码注释:说明核心操作的目的(如抗锯齿、数据类型转换)。

运行说明

  1. 环境依赖

    bash

    pip install opencv-python numpy
    
  2. 资源准备

    • 准备测试图像(如 lena.jpgbackground.jpgforeground.png)。
    • 确保摄像头可用(粒子特效示例)。
  3. 功能测试

    • 运行代码,观察各窗口输出(绘图、图像混合、粒子特效)。
    • 控制台输出: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(向量化,非循环)

代码特点

  1. 完整性:包含从基础操作到复杂应用的全流程代码。
  2. 可读性:清晰的代码结构(模块化注释),关键操作标注知识点。
  3. 实践性:包含图像混合、实时特效等真实场景应用。
  4. 鲁棒性:添加图像读取错误检查(if lena is None)。
  5. 性能优化:展示 float32 优化、向量化操作、分块处理等技巧。

通过此代码,可全面掌握 OpenCV Core 模块的核心功能,为计算机视觉项目奠定坚实基础。每个代码段均可独立运行,方便按需复用。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐