OpenCV 视觉成长实战:从图像读取到人脸识别的 6 个案例

案例 1:图像读取与显示
import cv2

# 读取图像
image = cv2.imread("image.jpg")  
# 显示图像
cv2.imshow("原始图像", image)  
cv2.waitKey(0)  # 按任意键关闭窗口

关键点imread()支持 JPG/PNG 等格式,imshow()需配合waitKey()实现窗口交互。


案例 2:图像灰度化处理
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  
cv2.imshow("灰度图像", gray_image)
cv2.waitKey(0)

原理:将 RGB 三通道转换为单通道灰度值,计算式为:
$$Gray = 0.299R + 0.587G + 0.114B$$


案例 3:边缘检测(Canny算法)
edges = cv2.Canny(gray_image, 100, 200)  # 阈值1=100, 阈值2=200
cv2.imshow("边缘检测", edges)
cv2.waitKey(0)

参数解析

  • 低阈值(100):弱边缘过滤阈值
  • 高阈值(200):强边缘保留阈值

案例 4:图像旋转与缩放
(h, w) = image.shape[:2]
center = (w // 2, h // 2)
# 旋转矩阵 (中心点, 角度, 缩放因子)
M = cv2.getRotationMatrix2D(center, 45, 0.8)  
rotated = cv2.warpAffine(image, M, (w, h))
cv2.imshow("旋转缩放", rotated)
cv2.waitKey(0)


案例 5:Haar级联人脸检测
# 加载预训练模型
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')  
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5)

# 标注人脸区域
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.imshow("人脸检测", image)
cv2.waitKey(0)

参数说明

  • scaleFactor=1.1:图像缩放步长
  • minNeighbors=5:候选框数量阈值

案例 6:DNN人脸识别(基于ResNet)
# 加载预训练模型
net = cv2.dnn.readNetFromCaffe("deploy.prototxt", "res10_300x300_ssd_iter_140000.caffemodel")
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))
net.setInput(blob)
detections = net.forward()

# 绘制识别结果
for i in range(detections.shape[2]):
    confidence = detections[0, 0, i, 2]
    if confidence > 0.7:  # 置信度阈值
        box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
        (x1, y1, x2, y2) = box.astype("int")
        cv2.rectangle(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.imshow("DNN人脸识别", image)
cv2.waitKey(0)

技术栈

  • 使用 Caffe 框架的 ResNet 模型
  • blobFromImage() 标准化图像输入
  • 置信度阈值过滤误检

学习路径建议

  1. 基础操作:案例 1~3 掌握图像 I/O 与预处理
  2. 几何变换:案例 4 理解仿射变换矩阵
  3. 传统算法:案例 5 实践 Haar 特征分类器
  4. 深度学习:案例 6 体验 DNN 模块部署

环境配置提示

pip install opencv-python numpy

模型文件需从 OpenCV GitHub 下载

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐