资讯动态

Python机器视觉开发体验

发布时间:2026/8/4 5:04:15 来源:尧图企业网站定制
一、前言近日学习Python机器视觉开发完成两套完整人脸检测 Demo静态图片人脸检测、摄像头实时人脸检测。此文章整合理论知识点、可直接运行代码、常见报错解决方案等适合 OpenCV 新手入门。二、环境搭建2.1 PyCharm Conda 虚拟环境配置 and 创建新项目环境选择规范 优先选择Previously configured interpreter复用已有 Conda 环境不要新建 Virtualenv避免重复安装依赖。2.2 opencv-python 与 opencv-contrib-python 区别两者只能二选一同时安装会引发模块冲突、函数找不到。包名包含功能适用场景opencv-pythonOpenCV 稳定基础模块图像 / 摄像头 / Haar 人脸检测仅基础图像处理opencv-contrib-python基础模块 全部扩展算法SIFT、人脸识别、目标跟踪等长期学习计算机视觉推荐安装四类 OpenCV 包区分opencv-python本地开发支持 imshow 弹窗opencv-contrib-python本地完整版含所有扩展算法opencv-python-headless服务器部署无 GUI 窗口opencv-contrib-python-headless服务器完整版无 GUI2.3 Python 单引号 / 双引号 / 三引号区别单引号 仅单行内部可直接写双引号内部单引号需转义\tip Snape whispered: Always. sentence I\m still deeply in love with Lily.双引号 仅单行内部可直接写单引号项目编码规范首选tip Im Sirius Black, Harrys godfather.三引号 / 支持多行字符串自动保留换行无需\n内部单双引号均不用转义两大用途长文本、函数文档注释规范使用三双引号# 多行提示文本 msg 人脸检测程序操作说明 1. 按 q 键关闭摄像头 2. 录制视频自动存入video文件夹 # 文档注释 def face_detect(): 基于Haar级联分类器实现人脸检测 pass2.4 f-string 格式化字符串f字符串前缀f代表f-string全称格式化字符串formatPython3.6 支持语法{变量/表达式}运行时自动替换为内容简化字符串拼接# 老式写法 print(实时人脸坐标, x, y, w, h) # f-string推荐写法 print(f实时人脸坐标: {x, y, w, h})⚠️要点f紧贴引号f文本禁止空格f 文本原样输出大括号需要双写{{ }}大括号内支持运算f人脸区域总大小{w h}三、机器视觉核心理论3.1 标准视觉处理五链路图像采集 → 图像预处理 → 特征提取 → 目标检测 → 可视化输出图像采集读取本地图片 / 摄像头视频流原始像素矩阵预处理灰度化、高斯模糊降噪、二值化降低计算量、过滤噪声特征提取提取图像边缘、纹理、明暗特征目标检测算法定位目标坐标可视化绘制矩形框、文字展示识别结果。3.2 图像底层矩阵原理彩色图像三维数组(高度,宽度,3)OpenCV 通道顺序为 BGR像素值 0~255灰度图像二维数组(高度,宽度)舍弃色彩信息计算量减少 2/3人脸检测必须灰度图预处理作用灰度转换消除色彩干扰提升运行速度高斯模糊平滑画面抑制噪点减少误检阈值二值化图像黑白二分突出物体轮廓。3.3 Haar 级联分类器检测原理基于 Haar 特征 AdaBoost 算法灰度图中多尺度滑动窗口识别人脸 detectMultiScale 核心参数scaleFactor1.1图像缩放比例数值越小检测越精细速度越慢minNeighbors5过滤无效检测框降低误检minSize/maxSize限制人脸尺寸过滤画面中过大 / 过小干扰区域 OpenCV 内置预训练人脸模型推荐使用内置路径避免文件缺失报错。四、实战代码 1静态图片人脸检测 demo1.py功能读取本地图片、等比例缩放、人脸检测、绘制检测框、窗口 3 秒自动关闭import cv2 # 1.读取图片 img cv2.imread(./img/hua1_GPT.png) print(图像矩阵, img) print(图像类型, type(img)) print(图像形状(高,宽,通道), img.shape) # 获取原图宽高等比例缩放不拉伸 h, w img.shape[:2] target_w 511 scale target_w / w target_h int(h * scale) img_re cv2.resize(img, (target_w, target_h)) print(缩放后图像类型, type(img_re)) print(缩放后图像形状, img_re.shape) # 2.加载人脸检测模型推荐内置路径避免文件找不到 face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml) # 3.执行人脸检测 faces face_cascade.detectMultiScale(img_re, 1.1, 5, minSize(100, 100), maxSize(2000, 2000)) print(检测到所有人脸坐标, faces) # 4.遍历人脸绘制检测框 for (x, y, w, h) in faces: print(f人脸位置 x:{x},y:{y},宽:{w},高:{h}) cv2.rectangle(img_re, (x, y), (x w, y h), (210, 0, 180), 2, cv2.LINE_AA) # 5.展示窗口3000毫秒后自动关闭 cv2.imshow(img_try, img_re) cv2.waitKey(3000) cv2.destroyAllWindows()代码关键点说明cv2.imread读取图片路径使用相对路径项目根目录新建img文件夹存放图片cv2.resize实现等比例缩放避免图片拉伸变形cv2.rectangle参数画布、左上角坐标、右下角坐标、BGR 颜色、线条粗细、抗锯齿cv2.waitKey(3000)窗口停留 3 秒填 0 代表无限等待任意按键关闭。五、实战代码 2摄像头实时人脸检测 demo2.py功能摄像头读取、画面时间戳、人脸高斯马赛克、自动录制 MP4 视频、q 键退出释放资源import cv2 import os from datetime import datetime # 1.打开默认摄像头 cap cv2.VideoCapture(0) if not cap.isOpened(): print(摄像头打开失败检查设备是否被其他软件占用) exit() # 视频录制配置 # 获取摄像头分辨率 width int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # mp4编码格式 fourcc cv2.VideoWriter.fourcc(*mp4v) # 自动创建视频存储文件夹 if not os.path.exists(video): print(文件夹video不存在已重新创建) os.mkdir(video) # 视频写入对象 out cv2.VideoWriter(video/face_record.mp4, fourcc, 30, (width, height)) # 2.加载人脸检测模型 face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml) # 3.循环读取摄像头每一帧画面 while True: ret, frame cap.read() if not ret: break # 获取当前时间戳 now_time datetime.now().strftime(%Y-%m-%d %H:%M:%S) # 转为灰度图人脸检测必备 frame_gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 人脸检测 faces face_cascade.detectMultiScale(frame_gray, 1.1, 5, minSize(100, 100), maxSize(2000, 2000)) # 画面左上角绘制时间文字 cv2.putText(frame, now_time, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 190, 0), 2) # 遍历人脸绘制检测框 人脸马赛克隐私处理 for (x, y, w, h) in faces: print(f实时人脸坐标{x, y, w, h}) cv2.rectangle(frame, (x, y), (x w, y h), (255, 0, 120), 2, cv2.LINE_AA) # 截取人脸区域 face_roi frame[y:y h, x:x w] # 高斯模糊生成马赛克卷积核越大模糊越强 blur_face cv2.GaussianBlur(face_roi, (31, 31), 0) # 模糊区域覆盖原图人脸 frame[y:y h, x:x w] blur_face # 将当前帧写入视频文件 out.write(frame) cv2.imshow(Face Detect, frame) # 按键监听按q退出 key cv2.waitKey(1) if key ord(q): break # 释放全部硬件资源防止摄像头持续占用 cap.release() out.release() cv2.destroyAllWindows()功能说明画面时间戳datetime获取系统时间cv2.putText绘制文字人脸隐私马赛克截取人脸 ROI 区域高斯模糊后覆盖原图视频自动保存cv2.VideoWriter录制每一帧自动创建video文件夹存储 mp4资源规范释放cap.release()释放摄像头、out.release()关闭视频流、cv2.destroyAllWindows()销毁窗口避免资源占用报错。六、进阶拓展方向滑动条动态调整马赛克模糊强度检测到人脸后单独裁剪保存人脸图片统计画面人脸数量并标注编号基于 opencv-contrib 的 face 模块实现人脸身份识别读取网络 RTSP 视频流做远程人脸检测。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价