2011-07-04 233 views
14

我对OpenCV非常陌生(前两天开始使用它),我试图从Kinect获得的深度图像中剪切手形图像,我需要手势图像进行手势识别。我有一个cv::Mat类型的图像。我的问题是:OpenCV C++,使用cv获取感兴趣区域(ROI):: Mat

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

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

回答

29

您可以使用在cv::Mat重载函数调用操作:

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

检查OpenCV documentation更多的信息和重载函数,接受cv::Rect。请注意,使用这种形式的切片可创建新的矩阵标题,但不会复制数据。

+1

感谢您的回答!我试过Range,但它给了我一个运行时错误,但cv :: Rect()工作得很好! – vprasad

+0

你能用编译失败的'cv :: Range'代码来编辑你的问题吗?另外,如果有帮助,请接受我的回答。 –

+2

cv:范围给了我运行时错误,但cv :: Rect像一个魅力工作!谢谢! – Froyo

7

可能的另一种方法可以是:

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

我希望这可以帮助。