首页 > 解决方案 > cv2.CascadeClassifier.detectMultiScale 错误

问题描述

我正在编写一个使用 tkinter 和 pyautogui 截取屏幕截图并在屏幕上绘图的程序。

我正在使用 cv2.CascadeClassifier 在图像中查找人脸。该图像是程序执行每个循环的屏幕截图中的一个矩形切片(所有这些代码每 100 毫秒在 tkinter 的 'after' 函数中运行一次)。

这就是我初始化 CascadeClassifier 的方式:

        cascPath = "haarcascade_frontalface_default.xml"
        casc_dir = cv2.data.haarcascades
        self.face_cascade = cv2.CascadeClassifier(casc_dir + "/" + cascPath)

然后像这样使用它:

def detect_faces(self, img):
        if len(img) == 0 or len(img[0]) == 0:
            return []

        img = cv2.cvtColor(img, cv2.CV_8U)
        faces = self.face_cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=5, minSize=(96, 
        96))
        return faces

什么时候img是我切成矩形的屏幕截图:

def capture_screen():
    img = pyautogui.screenshot()
    img = np.array(img)  # convert these pixels to a proper numpy array to work with OpenCV
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    return gray

img = capture_screen()
.
.
<some code to obtain x, y, h, w>
.
.
frame = img[y:y + h, x:x + w]
faces = self.detect_faces(frame)

然后对于这一行:

faces = self.face_cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=5, minSize=(96, 96))

我得到错误:

cv2.error: OpenCV(4.4.0) c:\users\appveyor\appdata\local\temp\1\pip-req-build-71670poj\opencv\modules\objdetect\src\cascadedetect.hpp:46: error: (-215:Assertion failed) 0 <= scaleIdx && scaleIdx < (int)scaleData->size() in function 'cv::FeatureEvaluator::getScaleData'

烦人的部分是这个错误并不总是被提出,它使调试变得困难。

有什么帮助吗??

标签: pythoncv2cascade-classifier

解决方案


推荐阅读