La compréhension Rect en C++, OpenCV

Je suis en train de marquer les pixels à l'intérieur d'un rectangle. Le rectangle à être marqué est décidé dans une construction if-else. J'obtiens l'erreur suivante sur l'utilisation des rectangles qui sont définis dans l'une des if-else blocs:
"Échec de l'Assertion (0 <= roi.x && 0 < = roi.largeur && roi.x + roi.largeur <=m.cols && 0 <=roi.hauteur && roi.y +roi.hauteur <= m.les lignes)"

Voici l'extrait de code, je suis en utilisant:

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);

"visages" est un vecteur de rectangles retourné à partir de la detectMultiScale.
Ce qui me déroute, c'est que si je déclare le rectangle_inner et rectangle_outer à l'extérieur de l'if-else blocs (comme c'est en commentaire dans le code-extrait de code, juste en dessous de l'autre), le code fonctionne très bien pour le cas où l 'si la condition n'est pas vrai. Donc, fondamentalement, je suis attendu pour déclarer mon rectangle_inner et rectangle_outer à l'extérieur de l'if-else blocs, qui ne fait pas de sens. Est-il un travail?

  • si((0 <= roi.x ) && (0 < = roi.la largeur) && ((roi.x + roi.la largeur) <=m.cols ) && (0 <= roi.y ) && (0 <=roi.hauteur ) && ((roi.y +roi.hauteur )<= m.les lignes))
  • Je désolé. N'ai pas très bien compris votre réponse. Pouvez-vous développer?