2011-07-04 42 views
14

Soy muy nuevo en OpenCV (comencé a utilizarlo hace dos días), estoy tratando de cortar una imagen de una imagen de profundidad obtenida de Kinect , Necesito la imagen de la mano para el reconocimiento de gestos. Tengo la imagen como tipo cv::Mat. Mis preguntas son:OpenCV C++, obteniendo Region of Interest (ROI) usando cv :: Mat

  1. ¿Hay una manera de convertir a cv::MatcvMat de modo que pueda utilizar cvGetSubRect método para obtener la región de interés?
  2. ¿Hay algún método en cv::Mat que pueda usar para obtener la parte de la imagen?

que quería utilizar IplImage pero he leído en alguna parte que cv::Mat es la forma preferida ahora.

Respuesta

29

Usted puede utilizar el operador sobrecargado llamada a la función en la cv::Mat:

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

Comprobar la OpenCV documentation para obtener más información y para la función sobrecargada que toma un cv::Rect. Tenga en cuenta que el uso de esta forma de creación de división crea un nuevo encabezado de matriz, pero no copia los datos.

+1

¡Gracias por la respuesta! Probé el Range pero me dio un error de tiempo de ejecución pero el cv :: Rect() funcionó bien. – vprasad

+0

¿Podría editar su pregunta con el código 'cv :: Range' que falló? Además, acepte mi respuesta si fue útil. –

+2

cv: Range me dio error de tiempo de ejecución, pero cv :: Rect funcionó como un amuleto! ¡Gracias! – Froyo

7

Tal vez otro enfoque podría ser:

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

Espero que esto puede ayudar.

Cuestiones relacionadas