21

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

  1. 有没有办法转换cv::Mat为,cvMat以便我可以使用cvGetSubRect方法来获取感兴趣的区域?
  2. 有什么方法cv::Mat可以用来获取图像的一部分吗?

我想使用IplImage,但我在某个地方读到cv::Mat了现在首选的方式。

4

2 回答 2

45

您可以在以下位置使用重载函数调用运算符cv::Mat

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

查看OpenCV 文档以获取更多信息以及采用cv::Rect. 请注意,使用这种形式的切片会创建一个新的矩阵头,但不会复制数据。

于 2011-07-04T00:44:22.707 回答
20

也许另一种方法可能是:

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

我希望这会有所帮助。

于 2016-03-07T16:10:07.970 回答