我对OpenCV非常陌生(前两天开始使用它),我试图从Kinect获得的深度图像中剪切手形图像,我需要手势图像进行手势识别。我有一个cv::Mat
类型的图像。我的问题是:OpenCV C++,使用cv获取感兴趣区域(ROI):: Mat
- 有没有办法转换
cv::Mat
到cvMat
,这样我可以用cvGetSubRect
方法来获取感兴趣的区域? cv::Mat
有什么方法可以用来获取图像的一部分吗?
我想使用IplImage
,但我在某处读到cv::Mat
是现在的首选方式。
我对OpenCV非常陌生(前两天开始使用它),我试图从Kinect获得的深度图像中剪切手形图像,我需要手势图像进行手势识别。我有一个cv::Mat
类型的图像。我的问题是:OpenCV C++,使用cv获取感兴趣区域(ROI):: Mat
cv::Mat
到cvMat
,这样我可以用cvGetSubRect
方法来获取感兴趣的区域?cv::Mat
有什么方法可以用来获取图像的一部分吗?我想使用IplImage
,但我在某处读到cv::Mat
是现在的首选方式。
您可以使用在cv::Mat
重载函数调用操作:
cv::Mat img = ...;
cv::Mat subImg = img(cv::Range(0, 100), cv::Range(0, 100));
检查OpenCV documentation更多的信息和重载函数,接受cv::Rect
。请注意,使用这种形式的切片可创建新的矩阵标题,但不会复制数据。
可能的另一种方法可以是:
//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)
我希望这可以帮助。
感谢您的回答!我试过Range,但它给了我一个运行时错误,但cv :: Rect()工作得很好! – vprasad
你能用编译失败的'cv :: Range'代码来编辑你的问题吗?另外,如果有帮助,请接受我的回答。 –
cv:范围给了我运行时错误,但cv :: Rect像一个魅力工作!谢谢! – Froyo