c++ - opencv detectMultiScale问题导致程序过早退出
问题描述
我正在尝试使用 openCV 编写一个简单的人脸检测代码。程序运行,网络摄像头亮起,好像它即将打开,但大约 5 秒后,程序在框架窗口打开之前关闭。
起初我以为我没有正确加载 xml 文件,但后来我注意到这只发生在我包含级联分类器行时:
face_cascade.detectMultiScale(frame_gray, faces, 1.1, 3,0 | CASCADE_SCALE_IMAGE, Size(30, 30));
当我注释掉这一行时,程序似乎运行良好,因为网络摄像头窗口打开了。我相信我已经正确填写了参数,所以我不确定我为什么会遇到这个问题。
这是我的代码:
#include <iostream>
#include <string>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/opencv.hpp"
#include "opencv2/objdetect/objdetect.hpp"
using namespace cv;
using namespace std;
//Global Variables
String face_cascade_name = "C:/Users/Administrator/Desktop/mirrorOS/External
Libraries/OpenCV/etc/haarcascades/haarcascade_frontalface_alt.xml";
CascadeClassifier face_cascade;
int main() {
face_cascade.load(face_cascade_name);
if (face_cascade.load(face_cascade_name)) {
cout << "Success" << endl;
}
Mat webcam; //create a mat object stores the current frame
Mat frame_gray; //gray frame
VideoCapture cap(0); //captures video from webcam
if (!cap.isOpened()) {
return -1;
}
while (cap.read(webcam)) {
cvtColor(webcam, frame_gray, COLOR_BGR2GRAY);
equalizeHist(frame_gray, frame_gray);
vector<Rect> faces;
face_cascade.detectMultiScale(frame_gray, faces, 1.1, 3,0 | CASCADE_SCALE_IMAGE, Size(30, 30));
for (size_t i = 0; i < faces.size(); i++) {
Rect face_i = faces[i];
rectangle(webcam, face_i, CV_RGB(0, 255, 0), 3);
}
imshow("Webcam", webcam);
waitKey(1);
destroyAllWindows();
}
return 0;
}
我尝试更改 cascadeClassifier 的参数值,但似乎没有任何效果,所以我不太确定我做错了什么。
通过调试器查看我在这一行有一个未处理的异常:
faceRecognition.exe 中 0x00007FFE3488BBF2 (opencv_world343d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0x0000022B0608F000。
解决方案
推荐阅读
- c# - 从对象列表创建一个 csv 文件 C#
- sql-server - 无法从 Ubuntu SQL Server Express 连接到 Amazon AWS SQL Server Express 数据库
- list - 查询地图列表的元素,并更新 dart 中的一个元素
- sql-server - 用相同的字符串替换替换多个字符串
- wordpress - 如何在 Wordpress 中显示类似 Google 财经的数据
- javascript - 使用 jQuery 淡入淡出文本
- javascript - 使用次要条件对数组进行排序
- android - Flutter - 如何使用 Canvas 围绕中心旋转图像?
- c - 从数组打印移位的字符集
- batch-file - 有没有办法在多个设备上使用 MediaFire 下载链接?