首页 > 解决方案 > 为什么python在opencv中为对象检测抛出断言错误?

问题描述

我正在尝试运行此代码。cv2.detectmultiscale但是 python 正在为行 ' '抛出错误

我使用 opencv_createsamples 和 opencv_traincascade 训练了一个自定义对象检测器。我得到的错误是:

cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-j8nxabm_\opencv\modules\objdetect\src\cascadedetect.cpp:1389: error: (-215:Assertion failed) scaleFactor > 1 && _image.depth() == CV_8U in function 'cv::CascadeClassifierImpl::detectMultiScale'

我的代码是:

    color = np.random.uniform(0, 255, 3)
    fc = cv2.CascadeClassifier(r"D:\data\cascade.xml")
    img = cv2.imread('3450.jpg')
    img = cv2.resize(img, (100, 100))
    gr = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    grey = np.array(gr, dtype='uint8')
    features = fc.detectMultiScale(grey, scaleFactor = 0.6, minNeighbors= 1)
    for  (x,y,w,h) in features :
        cv2.rectangle(img, (x,y), (x+w,y+h), color,3)
    cv2.imshow(img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

标签: pythonopencv

解决方案


正如@Yuri Hinsburg 在评论中提到的那样,文档说:

scaleFactor 参数指定在每个图像比例下图像尺寸缩小多少。

答案也在你的错误片段中,它清楚地说scaleFactor>1 && ..,你可以简单地用一个适当的值来改变它,或者你不选择任何值,它使用默认值(我在下面的例子中做了)是 1.1:

import numpy as np
import cv2

color = np.random.uniform(0, 255, 3)
fc = cv2.CascadeClassifier(r"haarcascade_frontalface_default.xml")
img = cv2.imread('face.jpg')
img = cv2.resize(img, (100, 100))
gr = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
grey = np.array(gr, dtype='uint8')
faces = fc.detectMultiScale(grey)

for  (x,y,w,h) in faces :
    cv2.rectangle(img, (x,y), (x+w,y+h), color,3)
cv2.imshow("Test",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

在此处输入图像描述


推荐阅读