web-dev-qa-db-fra.com

OpenCV C ++, obtention d'une région d'intérêt (ROI) à l'aide de cv :: Mat

Je suis très nouveau sur OpenCV (j'ai commencé à l'utiliser il y a deux jours), j'essaie de couper une image de main à partir d'une image de profondeur obtenue de Kinect, j'ai besoin de l'image de main pour la reconnaissance des gestes. J'ai l'image en tant que cv::Mat type. Mes questions sont:

  1. Existe-t-il un moyen de convertir cv::Mat à cvMat pour pouvoir utiliser la méthode cvGetSubRect pour obtenir la région d'intérêt?
  2. Y a-t-il des méthodes dans cv::Mat que je peux utiliser pour obtenir la partie de l'image?

Je voulais utiliser IplImage mais j'ai lu quelque part que cv::Mat est le moyen préféré maintenant.

18
vprasad

Vous pouvez utiliser l'opérateur de fonction surchargé sur cv::Mat:

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

Consultez la documentation OpenCV pour plus d'informations et pour la fonction surchargée qui prend un cv::Rect. Notez que l'utilisation de cette forme de découpage crée un nouvel en-tête de matrice, mais ne copie pas les données.

36
Michael Koval

Peut-être qu'une autre approche pourrait être:

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

J'espère que cela peut vous aider.

11
Angie Quijano