python - 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'
烦人的部分是这个错误并不总是被提出,它使调试变得困难。
有什么帮助吗??
解决方案
推荐阅读
- c# - 如何使用 C# 代码为 API 传递标头和正文信息
- python - 将多个sql行放入一个html文件
- authentication - 后端应用程序如何验证 JavaScript 框架应用程序发送的 JWT 令牌?
- python-3.x - 查找具有特定锚文本 Python / BeautifulSoup4 的所有 URL
- react-native - 当应用程序打开时,React Native Firebase 推送通知不起作用
- java - 如何对 CompletableFuture 任务执行转换
- bash - 是 for 循环还是 printf 序列更适合创建 n 个字符的字符串?
- postgresql - Postgresql - 查询 json 对象内的数组
- postgresql - 无法将 struct 元素分配为 Google/uuid 数据类型
- javascript - Kubernetes Nginx Ingress 处理 JavaScript 重定向