将face改为img后遇AttributeError:numpy.ndarray无detectMultiScale属性
为什么会出现'numpy.ndarray' object has no attribute 'detectMultiScale'错误?
这个错误的核心是你搞错了调用detectMultiScale方法的对象:
img是OpenCV读取或处理后得到的图像数据,属于numpy数组(numpy.ndarray类型),这类数组本身没有detectMultiScale方法detectMultiScale是OpenCV中级联分类器对象(比如cv2.CascadeClassifier的实例)专属的方法,你之前的代码里应该是用名为face的分类器实例调用这个方法,替换成img就完全不符合语法逻辑了
看你的代码片段,修正步骤很明确:
- 先确保你有初始化分类器的代码,比如:
face = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')(文件路径要对应你本地的级联分类器文件) - 把代码里的
img.detectMultiScale改回face.detectMultiScale(如果你的分类器实例名字不是face,就用你自己定义的名称)
修正后的代码示例:
# 初始化人脸级联分类器(路径根据实际情况调整) face = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') col = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 用分类器实例调用detectMultiScale,而非图像数组img faceDetails = face.detectMultiScale( col, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE ) for (x, y, w, h) in faceDetails: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
内容的提问来源于stack exchange,提问作者Md. Maruf Sarker
相关产品推荐
相关产品推荐

