OpenCV С++, получая область интереса (ROI), используя cv:: Mat

Я очень новичок в OpenCV (начал использовать его два дня назад), я пытаюсь вырезать изображение руки из изображения глубины, полученного от Kinect, мне нужно изображение руки для распознавания жестов. У меня есть образ как тип cv::Mat. Мои вопросы:

  • Есть ли способ конвертировать cv::Mat в cvMat, чтобы я мог использовать метод cvGetSubRect для получения интересующего региона?
  • Существуют ли какие-либо методы в cv::Mat, которые я могу использовать для получения части изображения?

Я хотел использовать IplImage, но где-то я читал, что cv::Mat является предпочтительным способом.

Ответы

Ответ 1

Вы можете использовать перегруженный оператор вызова функции на cv::Mat:

cv::Mat img = ...;
cv::Mat subImg = img(cv::Range(0, 100), cv::Range(0, 100));

Проверьте документацию OpenCV для получения дополнительной информации и для перегруженной функции, которая принимает cv::Rect. Обратите внимание, что использование этой формы среза создает новый заголовок матрицы, но не копирует данные.

Ответ 2

Возможно, другой подход может быть:

//Create the rectangle
cv::Rect roi(10, 20, 100, 50);
//Create the cv::Mat with the ROI you need, where "image" is the cv::Mat you want to extract the ROI from
cv::Mat image_roi = image(roi)

Надеюсь, это поможет.