python - 为什么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()
解决方案
正如@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()
结果:
推荐阅读
- django - 如何在 VSCode 终端中激活 python 虚拟环境
- excel - 如何使用 VBA 获取具有关联名称的 excel 图像?
- r - 如何从数据框中选择值仅存在于 2 列中的行
- android - 如何从 Room 数据库中提取嵌入式实体的数据和相关 POJO 的列表
- kotlin - 让 SSL 证书在 API 中工作(添加自定义 SSL 证书)
- python - 使用 Python selenium 查找 href 链接
- android - 在 viewModelScope 生命周期之后运行协程
- swift - 使用 Xcode 在物理设备上运行 swift 应用程序时出错
- flutter - 身体可能会正常完成
- excel - Excel中的逐个单元格条件格式