2011-07-04 509 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) 

我希望這可以幫助。