У меня есть изображение, которое содержит квадрат, и мне нужно извлечь область, содержащуюся в этом квадрате. После применения squares.c script (доступного в образцах каждого дистрибутива OpenCV) я получаю вектор квадратов, тогда мне нужно сохранить изображение для каждого из них.
Пользователь karlphillip предложил следующее:
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);
}
чтобы создать новый Mat подкатегорий для всех квадратов, обнаруженных в исходном изображении
Как заметил меня Карл, точки, обнаруженные на изображении, могут не представлять идеальный квадрат (как вы можете видеть на изображении выше), но код, который я только что предложил вам, предполагает, что они делают.
Фактически я получаю эту ошибку:
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
Предложение о том, чтобы script принять также не идеальные квадраты?