You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用cv2.imwrite()拍摄照片?检测人脸时该函数无法生成100张照片

解决cv2.imwrite()不工作及捕获100张人脸照片的问题

原代码存在的问题

  • 颜色转换错误:OpenCV通过cap.read()获取的帧是BGR格式,你用cv2.COLOR_RGB2BGR转换得到的不是灰度图,应该用cv2.COLOR_BGR2GRAY生成正确的灰度图,否则人脸检测会失效,后续保存逻辑也不会触发。
  • 文件名重复覆盖:生成的文件名{time_stamp}-face.jpg没有区分100张照片,循环100次会不断覆盖同一个文件,最后只保留1张。需要把循环索引加入文件名,确保每张照片唯一。
  • 逻辑错误:重复保存同一帧:当前代码在检测到人脸的单帧里循环100次保存同一帧,这不是“拍摄100张照片”,而是重复保存同一张。应该改为连续捕获100帧并分别保存。
  • 时间戳格式问题:%D已经包含月/日/年,再加上-%m-%Y会导致格式冗余,且%D里的斜杠在部分操作系统中是非法的文件名字符,建议改用无特殊字符的时间格式。
  • 未释放资源:代码结束后没有释放摄像头资源和销毁窗口,容易导致后续摄像头无法正常使用。

修复后的代码

import cv2
import datetime

cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# 标记是否正在捕获100张照片
capturing = False
capture_count = 0

while True:
    ret, frame = cap.read()
    if not ret:
        break  # 读取帧失败时退出
    
    # 正确转换为灰度图用于人脸检测
    greyImg = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(greyImg, 1.3, 5)    
    
    for x, y, w, h in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 5)
        # 检测到人脸且未在捕获状态时,启动100张捕获流程
        if not capturing:
            capturing = True
            capture_count = 0
    
    # 处于捕获状态时,逐帧保存
    if capturing:
        # 使用无特殊字符的时间戳+计数作为文件名,避免覆盖
        time_stamp = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
        file_name = f"{time_stamp}-face-{capture_count}.jpg"
        # 保存彩色帧(如需灰度帧可替换为greyImg)
        cv2.imwrite(file_name, frame)
        capture_count += 1
        # 捕获满100张后停止
        if capture_count >= 100:
            capturing = False
            print("已完成100张人脸照片捕获")
    
    cv2.imshow("Face recognition", cv2.flip(frame, 1))
    if cv2.waitKey(1) == ord("q"):
        break

# 释放摄像头资源并销毁窗口
cap.release()
cv2.destroyAllWindows()

修复说明

  • 新增capturing和capture_count变量,控制捕获状态和计数,确保检测到人脸后连续捕获100张不同的帧。
  • 修正灰度图转换方式,保证人脸检测逻辑正常触发。
  • 文件名加入时间戳和计数索引,既避免文件覆盖,又保证文件名在所有操作系统中合法。
  • 增加帧读取失败的判断,提升代码鲁棒性。
  • 代码结束时释放摄像头资源并销毁窗口,避免占用系统资源。

内容的提问来源于stack exchange,提问作者Ritesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:57:14