Я пытаюсь отметить пиксели внутри прямоугольника. Отмечаемый прямоугольник определяется в конструкции if-else. Я получаю следующую ошибку при использовании прямоугольников, которые определены в любом из блоков if-else: «Утверждение не выполнено (0 ‹= roi.x && 0 ‹ = roi.width && roi.x + roi.width ‹=m. cols && 0 ‹=roi.height && roi.y +roi.height ‹= m.rows)"
Вот фрагмент кода, который я использую:
if (faces.size() != 0){r = faces[0];}
if (eyes.size()!=0){r2 = eyes[0];}
markers(image.rows,image.cols)
if(faces.size() == 0){
cout << "No Face found";
rectangle_face = rectangle_old;
rectangle_inner = rectangle_inner_old;
rectangle_outer = rectangle_outer_old;
}
else {
pt1.x = r.x;
pt1.y = r.y;
pt2.x = pt1.x + r.width;
pt2.y = pt2.y + r.height;
pt1_inner.x = r.x + (r.width)/3;
pt1_inner.y = r.y + (r.height)/3;
pt1_outer.x = pt1.x;
pt1_outer.y = pt1.y;
pt2_inner.x = pt2.x - (r.width)/3;
pt2_inner.y = pt2.y - (r.height)/3;
pt2_outer.x = pt2.x;
pt2_outer.y = image.rows;
rectangle_face = r;
rectangle_inner = Rect(pt1_inner,pt2_inner);
rectangle_outer = Rect(pt2_outer,pt2_outer);
}
//rectangle_inner = Rect(pt1_inner,pt2_inner);
//rectangle_outer = Rect(pt2_outer,pt2_outer);
rectangle_old = rectangle_face;
rectangle_outer_old = rectangle_outer;
rectangle_inner_old = rectangle_inner;
// Setting all pixels to possible background first
markers.setTo(cv::GC_PR_BGD);
//It get stuck at the following two lines
cv::Mat1b fg_seed_inside_face = markers(rectangle_inner);
//Marking pixels in order. Note: Order is important here.
cv::Mat1b Prfg_seed_FaceExtended = markers(rectangle_outer);
'faces' - это вектор прямоугольников, возвращенный из detectMultiScale. Что меня сбивает с толку, так это то, что если я объявлю прямоугольник_внутренний и прямоугольник_аутер вне блоков if-else (как это прокомментировано во фрагменте кода, прямо под условием else), код отлично работает в случае, когда условие «если» не правда. Таким образом, в основном я должен объявить свои прямоугольники прямоугольника_внутреннего и прямоугольника снаружи блоков if-else, что не имеет смысла. Есть ли обходной путь?