代码没有在opencv和c ++中检测口

时间:2014-02-24 06:46:02

标签: c++ opencv computer-vision feature-detection

我正在使用C ++和opencv。我正在使用此帖OpenCv assertion failed中的代码,即答案。然而,我通过将mouthROI.width和mouthROI.height除以5稍微更改了代码。代码在应该检测到嘴时在眼睛区域附近显示一个红色矩形。有谁知道代码有什么问题?谢谢

1 个答案:

答案 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;

}