OpenCV C ++,使用cv :: Mat获得感兴趣区域(ROI)

时间:2011-07-04 00:01:09

标签: c++ opencv roi

我是OpenCV的新手(两天前开始使用它),我正在尝试从Kinect获得的深度图像中剪切手部图像,我需要手部图像进行手势识别。我将图像作为cv::Mat类型。我的问题是:

  1. 有没有办法将cv::Mat转换为cvMat,以便我可以使用cvGetSubRect方法获取感兴趣的区域?
  2. 我可以使用cv::Mat中的任何方法来获取图像的一部分吗?
  3. 我想使用IplImage,但我在某处读到cv::Mat是现在首选的方式。

2 个答案:

答案 0 :(得分:34)

您可以在cv::Mat上使用重载的函数调用运算符:

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

检查OpenCV documentation以获取更多信息以及需要cv::Rect的重载功能。请注意,使用这种切片形式会创建一个新的矩阵标头,但不会复制数据。

答案 1 :(得分:11)

也许其他方法可能是:

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

我希望这可以提供帮助。

相关问题