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?