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
相关产品推荐
相关产品推荐

