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

vpr*_*sad 18 c++ opencv roi

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

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

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

Mic*_*val 37

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

cv::Mat img = ...;
cv::Mat subImg = img(cv::Range(0, 100), cv::Range(0, 100));
Run Code Online (Sandbox Code Playgroud)

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

  • 感谢你的回答!我尝试了 Range,但它给了我一个运行时错误,但 cv::Rect() 工作得很好! (2认同)
  • cv:Range给了我运行时错误,但是cv :: Rect就像一个魅力!谢谢! (2认同)

Ang*_*ano 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)
Run Code Online (Sandbox Code Playgroud)

我希望这可以提供帮助.