2026/2/15 10:27:06
网站建设
项目流程
南通南通网站优化,网站专题框架怎么做,有哪些平台可以发布厂家信息,网站模板文章资讯Day 77#xff1a;【99天精通Python】计算机视觉 (OpenCV) 基础 - 给程序装上眼睛
前言
欢迎来到第77天#xff01;
在之前的 76 天里#xff0c;我们处理的都是文本数据#xff08;字符串、数字、JSON#xff09;。
但现实世界是视觉的。自动驾驶、人脸支付、安防监控【99天精通Python】计算机视觉 (OpenCV) 基础 - 给程序装上眼睛前言欢迎来到第77天在之前的 76 天里我们处理的都是文本数据字符串、数字、JSON。但现实世界是视觉的。自动驾驶、人脸支付、安防监控这些都离不开计算机视觉 (Computer Vision, CV)。OpenCV (Open Source Computer Vision Library)是 CV 领域的绝对霸主。它用 C 编写速度极快且提供了完善的 Python 接口。今天我们将学习如何用 OpenCV 打开摄像头、处理视频流并实现一个简单的人脸检测。本节内容OpenCV 安装与基本操作图片读取与灰度转换视频流处理 (摄像头)绘图功能 (画框、写字)实战练习实时人脸检测一、安装 OpenCV# opencv-python: 核心库# opencv-contrib-python: 包含一些扩展功能 (如人脸识别算法)pipinstallopencv-python opencv-contrib-python在代码中导入时包名是cv2(这是历史遗留命名对应 OpenCV 2.x API)。二、图片基础操作2.1 读取与显示OpenCV 读取图片后返回的是一个NumPy 数组(H, W, BGR)。注意OpenCV 默认颜色通道顺序是BGR(Blue, Green, Red)而不是常见的 RGB。importcv2# 1. 读取图片imgcv2.imread(test.jpg)ifimgisNone:print(图片读取失败)exit()# 查看属性 (高度, 宽度, 通道数)print(img.shape)# 2. 显示图片cv2.imshow(My Image,img)# 3. 等待按键 (0 表示无限等待)cv2.waitKey(0)# 4. 销毁窗口cv2.destroyAllWindows()2.2 灰度转换在做图像识别时色彩信息往往是干扰项。我们通常先把图片转为灰度图 (Grayscale)。# BGR - Graygraycv2.cvtColor(img,cv2.COLOR_BGR2GRAY)cv2.imshow(Gray,gray)cv2.waitKey(0)三、视频流处理 (摄像头)视频其实就是一连串快速播放的图片帧。importcv2# 0 表示第一个摄像头 (通常是电脑自带的)# 也可以填视频文件路径 video.mp4capcv2.VideoCapture(0)ifnotcap.isOpened():print(摄像头无法打开)exit()whileTrue:# ret: 是否成功读取# frame: 当前帧的图像 (numpy array)ret,framecap.read()ifnotret:break# 在这里可以对 frame 进行处理 (如滤镜、检测)# 显示cv2.imshow(Camera,frame)# 按 q 退出 (wait 1ms)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()四、绘图功能我们可以在图片上画框、写字这在目标检测中把人脸框出来非常有用。# 画矩形 (img, 左上角, 右下角, 颜色BGR, 线宽)cv2.rectangle(img,(50,50),(200,200),(0,255,0),2)# 画圆 (img, 圆心, 半径, 颜色, 线宽 -1表示填充)cv2.circle(img,(300,300),50,(0,0,255),-1)# 写字 (不支持中文中文需用 Pillow)cv2.putText(img,OpenCV,(10,40),cv2.FONT_HERSHEY_SIMPLEX,1,(255,255,255),2)五、实战练习实时人脸检测OpenCV 自带了Haar Cascades分类器虽然不如深度学习模型准但速度极快适合入门。5.1 准备模型文件OpenCV 安装后自带了 xml 文件。通常在cv2/data/目录下。我们需要haarcascade_frontalface_default.xml。importcv2importos# 获取模型路径face_xmlcv2.data.haarcascadeshaarcascade_frontalface_default.xmlface_cascadecv2.CascadeClassifier(face_xml)capcv2.VideoCapture(0)whileTrue:ret,framecap.read()ifnotret:break# 1. 转灰度 (检测需要)graycv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)# 2. 检测人脸# scaleFactor: 缩放比例# minNeighbors: 至少被检测多少次才算人脸 (过滤误检)facesface_cascade.detectMultiScale(gray,scaleFactor1.1,minNeighbors5,minSize(30,30))# 3. 画框for(x,y,w,h)infaces:# 画矩形cv2.rectangle(frame,(x,y),(xw,yh),(255,0,0),2)# 写标签cv2.putText(frame,Face,(x,y-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(255,0,0),2)# 显示结果cv2.imshow(Face Detection,frame)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()六、常见问题Q1cv2.imshow报错或窗口卡死OpenCV 的 GUI 是基于 HighGUI 的必须调用cv2.waitKey(delay)才能刷新窗口。如果在循环里忘了写 waitKey窗口就会卡死。Q2如何显示中文OpenCV 的putText不支持中文。解决方案把 OpenCV 图像 (NumPy) 转为 Pillow 图像 - 用 Pillow 写中文 - 转回 OpenCV 图像。Q3人脸检测误检严重Haar 特征是基于纹理的容易把窗帘、阴影识别成人脸。进阶方案使用 DNN 模块加载 SSD 模型或者使用dlib/mediapipe库更准。七、小结OpenCV 基础图像 I/O视频处理特征检测imread / imshowBGR 格式cvtColor (转灰度)VideoCapture(0)read() - framewaitKey(1) 刷新CascadeClassifierdetectMultiScalerectangle 画框关键要点NumPy是 OpenCV 的数据基础图像本质上就是矩阵。BGR时刻记得 OpenCV 是 Blue-Green-Red 顺序。灰度图很多 CV 算法边缘检测、人脸检测都需要先转灰度。八、课后作业边缘检测查阅Canny算法文档编写一个程序实时显示摄像头的边缘检测画面黑底白线。眼睛检测在人脸检测的基础上在人脸区域内进一步检测眼睛 (haarcascade_eye.xml)。隐私保护检测到人脸后不画框而是对人脸区域进行高斯模糊打码。下节预告Day 78深度学习入门 (PyTorch) 上篇- 传统的 CV 算法到了瓶颈。明天我们迈入 AI 的核心领域——深度学习学习如何用张量 (Tensor) 来训练模型。系列导航上一篇Day 76 - AI进阶LangChain下一篇Day 78 - 深度学习PyTorch上待更新