我是OpenCV的新手(两天前开始使用它),我正在尝试从Kinect获得的深度图像中剪切手部图像,我需要手部图像进行手势识别。我将图像作为cv::Mat
类型。我的问题是:
cv::Mat
转换为cvMat
,以便我可以使用cvGetSubRect
方法获取感兴趣的区域?cv::Mat
中的任何方法来获取图像的一部分吗?我想使用IplImage
,但我在某处读到cv::Mat
是现在首选的方式。
答案 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)
我希望这可以提供帮助。