【问题标题】:OpenCv assertion failedOpenCv 断言失败
【发布时间】:2014-02-10 11:38:44
【问题描述】:

我正在开发在 2D 图像中寻找人脸的应用程序,然后在同一图像中寻找嘴巴,但我现在遇到了一些问题。到目前为止,这是我的代码:

for (int i = 0; i < faces.size(); i++)
{
        Point pt1(faces[i].x, faces[i].y);
        Point pt2((faces[i].x + faces[i].height), (faces[i].y + faces[i].width));
        rectangle(frame, pt1, pt2, Scalar(255,0 , 0), 2, 8, 0);

                    //I WANT ROI(FOR MOUTH DETECTION) TO BE ONLY HALF OF THE RECTANGLE WITH FACE
        Rect mouthROI;
        mouthROI.x = (faces[i].x);
        mouthROI.y = faces[i].y*(1.5);
        mouthROI.width = (faces[i].x + faces[i].height);
        mouthROI.height = (faces[i].y + faces[i].width);

                    //I CHECK IF NEW RECTANGLE IS EXACTLY BOTTOM HALF OF PREVIOUS ONE
        Point ptAA(mouthROI.x, mouthROI.y);
        Point ptBB(mouthROI.width, mouthROI.height);
        rectangle(frame, ptBB, ptAA, Scalar(0,0 , 255), 2, 2, 0);


        Mat image_roi = frame(mouthROI);

        cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
        equalizeHist( frame_gray, frame_gray );

                    // DETECTING MOUTH INSIDE ROI OF EARLIER DETECTED FACE
        mouth_cascade.detectMultiScale(image_roi, mouths, 1.1, 2, 0, Size(30, 30));

        for(int i = 0; i < mouths.size(); i++)
        {
            Point pt1(mouths[i].x, mouths[i].y); // Display detected faces on main window - live stream from camera
            Point pt2((mouths[i].x + mouths[i].height), (mouths[i].y + mouths[i].width));
            rectangle(frame, pt1, pt2, Scalar(0, 255, 0), 2, 8, 0);
        }

}

很遗憾,此代码不起作用。我收到这样的错误:

OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in cv::Mat::Mat(const cv::Mat&, const cv::Rect&), file C:/build/2_4_PackSlave-win32-vc11-shared/opencv/modules/core/src/matrix.cpp, line 323

如何解决此错误。谢谢大家的帮助!

【问题讨论】:

  • 您传递给抛出断言的函数的参数不正确。使用调试器来确定是哪个函数抛出了断言,并将其追溯到代码中启动调用的行。
  • 错误在这个地方Mat image_roi = frame(mouthROI);,但我还是不知道为什么...
  • 查看Similar link,看看你是否犯了同样的错误。

标签: c++ image opencv face-detection roi


【解决方案1】:

您初始化mouthROI 的方式不正确。应该是这样的,

<previous code>
mouthROI.width = (faces[i].height);
mouthROI.height = (faces[i].width);

Point ptAA(mouthROI.x, mouthROI.y);
Point ptBB(mouthROI.x+mouthROI.width, mouthROI.y+mouthROI.height);

记住 cv::Rect 不取矩形的位置,它取左上角的位置和宽度高度.. 详情请参阅documentation

HTH

【讨论】:

    猜你喜欢
    • 2012-11-26
    • 2014-11-24
    • 2014-05-28
    • 2020-12-31
    • 2015-09-12
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    相关资源
    最近更新 更多