我正在使用C ++和opencv。我正在使用此帖OpenCv assertion failed中的代码,即答案。然而,我通过将mouthROI.width和mouthROI.height除以5稍微更改了代码。代码在应该检测到嘴时在眼睛区域附近显示一个红色矩形。有谁知道代码有什么问题?谢谢
答案 0 :(得分:2)
我从您的代码中可以理解的是,您的pt1和pt2在口腔检测中未正确初始化。
他们必须
Point pt1(faces[i].x + mouths[i].x, faces[i].y + mouths[i].y);
Point pt2(pt1.x + mouths[i].width, pt1.y + mouths[i].height);
此外,我不知道你要在哪里使用你的代码,但是,它看起来太长,只是面子和嘴巴,我指的是你在以前的问题中分享的代码。如果你还没有得到输出,请告诉我,我可以自由地分享我的旧代码片段。
它给了我结果。别忘了将xml文件添加到项目目录中。
#include "stdafx.h"
#include "opencv2\highgui\highgui.hpp"
#include "opencv2\objdetect\objdetect.hpp"
#include "opencv2\imgproc\imgproc.hpp"
using namespace cv;
int main(int argc, const char** argv)
{
VideoCapture cap(0);
CascadeClassifier face, mouth;
face.load("haarcascade_frontalface_default.xml");
mouth.load("haarcascade_mcs_mouth.xml");
Mat frame, grayframe, testframe;
while(1)
{
cap.read(frame);
if(!cap.read(frame))
{
printf("an error while taking the frame from cap");
}
vector< Rect > faces;
cvtColor(frame,grayframe, CV_BGR2GRAY);
equalizeHist(grayframe,testframe);
face.detectMultiScale(testframe, faces,1.1,3, CV_HAAR_SCALE_IMAGE,Size(30,30));
for(int i=0;i<faces.size();i++)
{
rectangle(frame,faces[i],Scalar(255,0,0),1,8,0);
Mat face = frame(faces[i]);
cvtColor(face,face,CV_BGR2GRAY);
vector <Rect> mouthi;
mouth.detectMultiScale(face,mouthi);
for(int k=0;k<mouthi.size();k++)
{
Point pt1(mouthi[0].x+faces[i].x , mouthi[0].y+faces[i].y);
Point pt2(pt1.x+mouthi[0].width, pt1.y+mouthi[0].height);
rectangle(frame, pt1,pt2,Scalar(255,0,0),1,8,0);
}
}
imshow("output", frame);
waitKey(33);
}
return 0;
}