2
我有一个函数可以从for循环中从main调用,它可以从视频源中搜索脸部。代码在第一次运行时完美运行,但在第二次循环时输出很多“Camera dropped frame!”。错误到控制台并不再更新视频源。什么是造成“相机掉帧!”使用OpenCV运行detectMultiScale时出错?
我找到了导致错误的行,它是包含detectMultiScale函数的行。完整的功能是在这里:
void findInFrame(Mat inputFrame)
{
vector<Rect> faces;
Mat grayFrame;
cvtColor(inputFrame, grayFrame, COLOR_BGR2GRAY);
faceClassifier.detectMultiScale(grayFrame, faces);
for(int i=0;i<faces.size();i++)
{
Point center(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5);
ellipse(inputFrame,center,Size(faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);
Mat faceROI = grayFrame(faces[i]);
}
imshow("frame", inputFrame);
}
抛出错误的路线是:第一导致错误
faceClassifier.detectMultiScale(grayFrame, faces);
每帧后。我怎样才能解决这个问题?
主要是在这里:
#include <iostream>
#include <unistd.h>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
string faceHaar = "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml";
string eyesHaar = "/usr/local/share/OpenCV/haarcascades/haarcascade_eye.xml";
CascadeClassifier faceClassifier;
void findInFrame(Mat inputFrame);
int main(int argc, const char * argv[])
{
VideoCapture cam(0);
Mat frame;
if(!faceClassifier.load(faceHaar))
{
cout << "Error loading face cascade" << endl;
return -1;
}
for(;;)
{
cam >> frame;
if(!frame.empty())
{
findInFrame(frame);
usleep(1000);
}
else
{
cout << "frame empty" << endl;
}
}
return 0;
}
感谢您的响应堆,我如何才能找到CV_HAAR_SCALE_IMAGE常量所在的库? – 2014-12-08 00:29:17
http://stackoverflow.com/questions/6119772/face-detector-parameters-for-opencv-cv-haar-scale-image ive在回答中增加了另一个建议 – chris 2014-12-08 00:30:47
我想也许CV_HAAR_SCALE_IMAGE已被弃用并替换为CASCADE_SCALE_IMAGE 。我用它取代了它,但仍然遇到同样的问题。要更新与我的主要问题,以确保我不抓帧错误。 – 2014-12-08 00:35:15