web-dev-qa-db-ja.com

OpenCV C ++、cv :: Matを使用して関心領域(ROI)を取得

私はOpenCVを初めて使用します(2日前に使用を開始しました)。Kinectから取得した深度画像から手の画像をカットしようとしています。ジェスチャー認識には手の画像が必要です。 cv::Matタイプの画像があります。私の質問は:

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

IplImageを使いたかったのですが、どこかでcv::Matが好ましい方法であると読んでいます。

18
vprasad

オーバーロードされた関数呼び出し演算子をcv::Matで使用できます。

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

OpenCVドキュメンテーション で詳細とcv::Rectをとるオーバーロード関数を確認してください。この形式のスライスを使用すると、新しいマトリックスヘッダーが作成されますが、データはコピーされません。

36
Michael Koval

他のアプローチは次のようになります:

//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)

これが役立つことを願っています。

11
Angie Quijano