OpenCV C++, получение области интереса (ROI) с помощью cv:: Mat

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

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

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

2 ответов


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

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

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


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

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

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