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)
Надеюсь, это поможет.