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

OpenCV Python人脸检测代码报错求助:imshow函数参数错误

解决OpenCV imshow报错:Bad argument (mat不是numpy数组...)

错误根源

你在调用cv2.imshow时犯了一个低级错误:

cv2.imshow('Faces', 'frame')

第二个参数传了字符串'frame',但OpenCV要求这里必须传入numpy数组格式的图像数据(也就是你从视频读取到的frame变量),字符串不符合参数要求,直接触发了重载解析失败的报错。

修正后的完整代码

把错误行改成传入变量frame即可,同时补充帧为空的判断(避免视频读取完毕后报错):

import numpy as np
import cv2


def initialize_face():
    cascade = '/Users/gadziaskarov/Desktop/py.projects/script_SO2/main.xml'

    clf = cv2.CascadeClassifier(cascade)
    camera = cv2.VideoCapture('video.mp4')

    while True:
        ret, frame = camera.read()
        # 处理视频读取完毕或读取失败的情况
        if not ret:
            break

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = clf.detectMultiScale(
            gray,
            scaleFactor=1.1,
            minNeighbors=5,
            minSize=(30,30),
            flags=cv2.CASCADE_SCALE_IMAGE
        )
        for (x,y, width, height) in faces:
            cv2.rectangle(frame, (x, y), (x + width, y + height), (255, 255, 0), 2)
        
        # 修正:传入变量frame而非字符串'frame'
        cv2.imshow('Faces', frame)

        if cv2.waitKey(1) == ord('q'):
            break

    camera.release()
    cv2.destroyAllWindows()
        

def main():
    initialize_face()

if __name__ == '__main__':
    main()

额外检查项

  • 确认video.mp4文件路径正确,若要调用摄像头,可将VideoCapture的参数改为0(默认摄像头)
  • 确认main.xml是有效的Haar级联分类器文件,路径无拼写错误
  • 确保OpenCV与numpy版本兼容(你当前使用的4.9.0版本无兼容问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:22:08