AI 视觉成长:OpenCV 从图像读取到人脸识别的 6 个实战案例(附代码)
·
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~3 掌握图像 I/O 与预处理
- 几何变换:案例 4 理解仿射变换矩阵
- 传统算法:案例 5 实践 Haar 特征分类器
- 深度学习:案例 6 体验 DNN 模块部署
环境配置提示:
pip install opencv-python numpy模型文件需从 OpenCV GitHub 下载
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)