Estoy trabajando con Kinect y OpenCV. Ya busco en este foro pero no encontré nada como mi problema. guardo los datos de profundidad primas de Kinect (16 bits), lo guarde en un CvMat * y luego lo paso a la cvGetImage para crear un IplImage * de él:Convertir profundidad de 8 bits CvMat * a 8 bits de profundidad
CvMat* depthMetersMat = cvCreateMat(480, 640, CV_16UC1);
[...]
cvGetImage(depthMetersMat,temp);
Pero ahora tengo que trabajar en esta imagen para hacer cvThreshdold y encontrar contornos. Estas 2 funciones necesitan una imagen de 8 bits de profundidad en la entrada. ¿Cómo puedo convertir CvMat * depthMetersMat en 8-bit-depth-CvMat *?
¿Qué significa "Escalar los valores"? – Maystro
@Maystro, un número de 16 bits sin signo puede tener un valor entre 0 y 65.535, pero necesitamos que los valores entren en un número de 8 bits, que solo puede contener valores de 0 a 255. Por lo tanto, aplicamos un factor de escala , lo que significa que multiplicas cada valor por una constante, en este caso, por 0.00390625. Cualquier número en la matriz original que tenga un valor de 0 a 255 obtiene un nuevo valor de 0, de 256 a 511 se convierte en 1, de 512 a 767 se convierte en 2, etc. – Gillfish
Entonces es como m2.convertTo (m2/256, CV_8U) ¿derecho? Otra pregunta, ¿qué pasa si no pasamos un parámetro de factor de escala? ¿Cómo se calculará? – Maystro