2011-07-04 34 views
14

OpenCVの新機能です(2日前に使い始めました)、私はKinectから取得した深度イメージから手画像を切り詰めようとしていますジェスチャー認識のために手画像が必要です。私はcv::Matタイプの画像を持っています。私の質問は以下のとおりです。OpenCV C++、cv :: Matを使用して関心領域(ROI)を取得する

  1. 私が関心領域を取得するためにcvGetSubRectメソッドを使用できるようにcv::MatcvMatに変換する方法はありますか?
  2. cv::Matに画像の一部を取得するための方法はありますか?

私はIplImageを使いたかったのですが、ここではcv::Matが好ましい方法です。

答えて

29

あなたはcv::Matにオーバーロードさ関数呼び出し演算子を使用することができます。

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

チェック詳細については、とcv::Rect取るオーバーロードされた関数のOpenCV documentation。この形式のスライシングを使用すると、新しいマトリックスヘッダーが作成されますが、データはコピーされません。

+1

ありがとうございます! Rangeを試しましたが、ランタイムエラーが発生しましたが、cv :: Rect()は正常に動作しました! – vprasad

+0

失敗した 'cv :: Range'コードで質問を編集できますか?また、私の答えが役に立ったらそれを受け入れてください。 –

+2

cv:Rangeは私にランタイムエラーを与えましたが、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) 

私はこれが役立つことを願って。

関連する問題