OpenCV C ++, получение области интересов (ROI) с помощью cv :: Mat - PullRequest
17 голосов
/ 04 июля 2011

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

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

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

Ответы [ 2 ]

36 голосов
/ 04 июля 2011

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

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

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

11 голосов
/ 07 марта 2016

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

//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)

Я надеюсь, что это может помочь.

...