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

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

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

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


person vprasad    schedule 04.07.2011    source источник


Ответы (2)


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

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

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

person Michael Koval    schedule 04.07.2011
comment
Спасибо за ответ! Я попробовал Range, но это дало мне ошибку времени выполнения, но cv::Rect() работал просто отлично! - person vprasad; 04.07.2011
comment
Не могли бы вы отредактировать свой вопрос с кодом cv::Range, который не удался? Кроме того, пожалуйста, примите мой ответ, если он был полезен. - person Michael Koval; 04.07.2011
comment
cv:Range дал мне ошибку во время выполнения, но cv::Rect работал как шарм! Благодарность! - person Froyo; 19.09.2012
comment
Да, похоже, он использует Rect. Проверьте jayrambhia. wordpress.com/2012/09/20/ для примера. - person Fanglin; 23.10.2014

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

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

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

person Angie Quijano    schedule 07.03.2016