我對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