OpenCV extrai a área de uma imagem de um vetor de quadrados

Tenho uma imagem que contém um quadrado e preciso extrair a área contida nesse quadrado. Depois de aplicar o squares.c script (disponível nas amostras de todas as distribuições OpenCV) Eu obtenho um vetor de quadrados e preciso salvar uma imagem para cada uma dela

O usuário karlphillip sugeriu isso:

for (size_t x = 0; x < squares.size(); x++) 
{
    Rect roi(squares[x][0].x, squares[x][0].y, 
             squares[x][1].x - squares[x][0].x, 
             squares[x][3].y - squares[x][0].y);
    Mat subimage(image, roi);
}

para gerar um novo Mat chamado subimagem para todos os quadrados detectados na imagem original

Como karl lembrou de mim, os pontos detectados na imagem podem não representar um quadrado perfeito (como você pode ver na imagem acima), mas o código que eu acabei de sugerir para você assume que si

Na verdade, recebo este erro:

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 Mat, file /usr/include/opencv/cxmat.hpp, 
      line 187

terminate called after throwing an instance of 'cv::Exception'
what():  /usr/include/opencv/cxmat.hpp:187: error: (-215) 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 function Mat

Aborted

Sugestão para fazer o script aceitar também quadrados não perfeitos?

questionAnswers(1)

yourAnswerToTheQuestion