Проблема с ошибкой утверждения OpenCV с Rois из-за размытия

в нижней части кода я хочу размыть прямоугольники распознавания лиц с помощью функции Gaussianblur(frame(roi)).

void drawPred(int classId, float conf, int left, int top, int right, int bottom, Mat& frame)
{
    //Draw a rectangle displaying the bounding box
    rectangle(frame, Point(left, top), Point(right, bottom), Scalar(255, 178, 50),LINE_4);


    //Bluring RoI
    Point leftTop = Point(left, top); 
    Point rightBottom = Point(right, bottom);

    Rect roi = Rect(leftTop, rightBottom); 

    GaussianBlur(frame(roi), frame(roi), Size(5, 5),0);

    //Get the label for the class name and its confidence
    string label = format("%.2f", conf);
    if (!classes.empty())
    {
        CV_Assert(classId < (int)classes.size());
        label = classes[classId] + ":" + label;
    }

    //Display the label at the top of the bounding box
    int baseLine;
    Size labelSize = getTextSize(label, FONT_ITALIC, 0.5, 1, &baseLine);
    top = max(top, labelSize.height);

    putText(frame, label, Point(left, top), FONT_ITALIC, 0.5, Scalar(255, 255, 255), 1);
}

Успешно я могу выполнить этот код около 10-15 кадров, позже в определенный момент код резко падает с более низкой ошибкой.

OpenCV: terminate handler is called! The last OpenCV error is:
OpenCV(3.4.5) 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,
file c:\build\3_4_winpack-build-win64-vc15\opencv\modules\core\src\matrix.cpp, line 466

Я не понимаю, что это значит, и, к сожалению, не знаю, как это решить, потому что мой опыт C++ недостаточно хорош. Мне бы очень помогло, если бы вы могли дать мне несколько небольших советов.

Большое спасибо и большой привет


person deptrai    schedule 01.10.2019    source источник
comment
твоя роль вне поля зрения   -  person Miki    schedule 01.10.2019
comment
Привет. Извините меня очень, что задаю такие плохие вопросы. Не подскажете, что можно сделать, когда коробка не в кадре? Это моя проблема.   -  person deptrai    schedule 01.10.2019
comment
Вы можете вставить его в изображение: Rect roi = Rect(leftTop, rightBottom); cv::Rect frame_roi(0, 0, frame.cols, frame.rows); roi &= frame_roi;. Тогда roi всегда будет внутри изображения (но в конечном итоге меньше оригинала).   -  person Miki    schedule 01.10.2019