Разделение кадра стереокамеры на левую и правую рамку датчика

Я работаю со стереокамерой и снимаю кадры с помощью opencv. Захваченный кадр содержит изображение от левого и правого датчика, соединенных вместе в одном изображении. Итак, с разрешением 640*480 у меня есть изображение с 1280 столбцами и 480 строками. Первые 640 столбцов принадлежат одному датчику, а 641-1280 - второму датчику. Мне нужно разделить его на левую и правую рамку. Я пытаюсь обрезать левый и правый кадры, но получаю ошибку. Я удалил лишний код и показываю только проблемную область.

  cap >> frame; // get a new frame from camera
  Mat fullframe = frame(Rect(0, 0, 1280, 480 )); //only to check that I have 1280 columns and 480 rows.and this line works
  Mat leftframe= frame(Rect(0,0,640,480)); // This also works
  Mat rightframe= frame(Rect(641,0,1280,480));// this gives an error

Ошибка приходит в cmd.exe и является:

    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 cv::Mat::Mat, file C:\builds\2_4_PackSlave-win64-vc11-shared\opencv\modules\core\src\matrix.cpp, line 323

Что я не понимаю. Если у меня 1280 столбцов, почему я не могу оставить только 641–1280 столбцов. Все, что выше 0, выдает ту же ошибку, так что даже если я использую:

    Mat rightframe= frame(Rect(1,0,1280,480)); // I still get same error

Любая помощь?

2 ответа

Решение

Просмотрите документацию Rect(x, y, width, height), где x, y - координаты верхнего левого угла. Соответственно должно быть Mat rightframe= frame(Rect(641,0,640,480));// this gives an error,

OpenCV обычно предполагает, что верхняя и левая границы прямоугольника являются включающими, а правая и нижняя - нет. Поэтому я предлагаю, чтобы ваш код выглядел следующим образом.

cap >> frame;
Mat fullframe = frame(Rect(0, 0, 1280, 480 ));
Mat leftframe= frame(Rect(0, 0, 640, 480));
Mat rightframe= frame(Rect(640, 0, 640, 480));

Я знаю, что уже немного поздно, но это может помочь другим, кто взглянет на этот вопрос в будущем.

Другие вопросы по тегам