【发布时间】:2021-11-08 15:37:24
【问题描述】:
我一直试图了解 OpenCV 和面部识别的工作原理,但我不断收到错误消息。
我收到以下错误消息:OpenCV:调用终止处理程序!最后一个 OpenCV 错误是:
OpenCV(4.5.3) 错误:断言失败 (!empty()) in cv::CascadeClassifier::detectMultiScale,文件 C:\build\master_winpack-build-win64-vc15\opencv \modules\objdetect\src\cascadedetect.cpp,第 1689 行
谁能告诉我这个错误信息是什么意思?
程序在运行几秒钟后崩溃,我看不到视频源。在我自己的代码失败了几次之后,我最终直接从教程中复制了代码。我使用了来自“https://www.youtube.com/watch?v=RY6fPxpN10E”的代码,但仍然收到错误消息。
(Main.cpp)
#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv )
{
double scale = 1.0;
cv::CascadeClassifier faceCascade;
faceCascade.load("C:/ComputerVision/opencv/build/etc/haarcascades_frontalface_alt.xml");
cv::VideoCapture video(0);
if(video.isOpened())
{
std::cout<<"Video funktioniert"<<std::endl;
}
//Frame speichern
cv::Mat frame;
//Loop yur Ausgabe von Video
while (video.read(frame))
{
video >> frame;
cv::Mat grayscale;
cvtColor(frame, grayscale, cv::COLOR_BGR2GRAY);
resize(grayscale, grayscale, Size(grayscale.size().width / scale, grayscale.size().height / scale));
vector<Rect> faces;
faceCascade.detectMultiScale(grayscale, faces, 1.1, 3.0, 0, Size(30, 30));
for (Rect area : faces)
{
Scalar drawColour = Scalar(255, 0, 0);
rectangle(
frame,
Point(
cvRound(area.x * scale),
cvRound(area.y * scale)),
Point(
cvRound((area.x + area.width - 1) * scale),
cvRound((area.y + area.height - 1) * scale)),
drawColour);
}
cv::imshow("video feed", frame);
if (cv::waitKey(25) >= 0)
{
break;
}
}
return 0;
}
(.pro)
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp
INCLUDEPATH += C:\ComputerVision\opencv\build\include\
LIBS += C:\ComputerVision\opencv\build\x64\vc15\lib\opencv_world453.lib
【问题讨论】:
-
在
detectMultiScale调用之前检查grayscale是否为空(if (!grayscale.data){/*error message*/}) -
刚试了一下,不是空的。
标签: c++ opencv face-recognition assertion