OpenCV 是 Python 计算机视觉最常用库,核心流程包括:BGR 图像读取与显示、灰度化/高斯模糊/自适应阈值预处理、轮廓提取与筛选、HOG+SVM 手写数字识别,强调实践闭环。

OpenCV 是 Python 计算机视觉最常用、最成熟的库,图像识别实战离不开它。掌握基础图像处理流程、关键函数用法和典型识别任务的实现逻辑,比死记参数更重要。
图像读取、显示与基础操作
所有图像识别任务都从加载图像开始。OpenCV 默认使用 BGR 顺序(非 RGB),这点容易出错。
- cv2.imread(path):读取图像,返回 NumPy 数组;路径含中文需用 cv2.imdecode(np.fromfile(...), -1)
- cv2.cvtColor(img, cv2.COLOR_BGR2RGB):转为 RGB 后再用 Matplotlib 显示,否则颜色异常
- 图像尺寸查看:img.shape → (height, width, channels),注意顺序不是 (width, height)
图像预处理——识别前的关键准备
原始图像常有噪声、光照不均、尺寸不一等问题,直接送入模型或算法效果差。预处理不是可选项,而是必选项。
- 灰度化:cv2.cvtColor(img, cv2.COLOR_BGR2GRAY),简化计算,适合边缘/轮廓检测
- 高斯模糊:cv2.GaussianBlur(gray, (5,5), 0),抑制噪声,提升后续二值化稳定性
- 自适应阈值:cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2),比固定阈值更适合光照不均场景
目标检测与轮廓识别实战
识别“图中有什么”或“物体在哪”,常用轮廓提取+几何分析,适合车牌、硬币、工件等规则目标。
立即学习“Python免费学习笔记(深入)”;
- 找轮廓:cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE),只取外轮廓更干净
- 筛选轮廓:按面积(cv2.contourArea)、宽高比、最小外接矩形角度等过滤干扰项
- 绘制与标注:cv2.drawContours(img, [cnt], -1, (0,255,0), 2) 或 cv2.boundingRect(cnt) 获取坐标后用 cv2.rectangle 标框
HOG + SVM 手写数字识别简例
不依赖深度学习,用传统机器学习也能完成经典识别任务,有助于理解特征与分类逻辑。
- HOG 特征提取:用 skimage.feature.hog() 或 OpenCV 的 cv2.HOGDescriptor() 提取方向梯度直方图
- 训练 SVM:scikit-learn 的 SVC(kernel='rbf'),用 MNIST 小样本(如 0–9 各 100 张)即可达到 95%+ 准确率
- 预测流程:预处理 → HOG 提取 → SVM.predict() → 输出类别,整个 pipeline 可封装成函数反复调用
图像识别不是一步到位的过程,而是“加载→预处理→特征→决策”的闭环。动手跑通一个完整例子(比如识别摄像头里的矩形卡片),比看十遍理论更管用。










