Aquí hay una función útil que puede usar para ayudar a identificar sus matrices opencv en tiempo de ejecución. Lo encuentro útil para depurar, al menos.
string type2str(int type) {
string r;
uchar depth = type & CV_MAT_DEPTH_MASK;
uchar chans = 1 + (type >> CV_CN_SHIFT);
switch ( depth ) {
case CV_8U: r = "8U"; break;
case CV_8S: r = "8S"; break;
case CV_16U: r = "16U"; break;
case CV_16S: r = "16S"; break;
case CV_32S: r = "32S"; break;
case CV_32F: r = "32F"; break;
case CV_64F: r = "64F"; break;
default: r = "User"; break;
}
r += "C";
r += (chans+'0');
return r;
}
Si Mes una var de tipo Mat, puede llamarlo así:
string ty = type2str( M.type() );
printf("Matrix: %s %dx%d \n", ty.c_str(), M.cols, M.rows );
Dará salida a datos como:
Matrix: 8UC3 640x480
Matrix: 64FC1 3x2
Vale la pena señalar que también existen métodos Matrix Mat::depth()y Mat::channels(). Esta función es solo una forma práctica de obtener una interpretación legible por humanos a partir de la combinación de esos dos valores cuyos bits están todos almacenados en el mismo valor.
depth()ychannels(), en lugar de usartype()que devuelve una combinación compleja entre el tipo de datos y el número de canales.