簡體   English   中英

OpenCv斷言失敗

[英]OpenCv assertion failed

我正在開發用於在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

如何解決此錯誤。 謝謝大家的幫助!

您初始化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不會占據矩形的位置 ,它會占據左上角的位置以及寬度高度 ..有關更多詳細信息,請參考文檔

高溫超導

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM