Aqui está uma função útil que você pode usar para ajudar a identificar suas matrizes opencv em tempo de execução. Acho útil para depuração, pelo 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;
}
Se Mfor uma var do tipo, Matvocê pode chamá-lo assim:
string ty = type2str( M.type() );
printf("Matrix: %s %dx%d \n", ty.c_str(), M.cols, M.rows );
Produzirá dados como:
Matrix: 8UC3 640x480
Matrix: 64FC1 3x2
É importante notar que também existem métodos Matrix Mat::depth()e Mat::channels(). Essa função é apenas uma maneira prática de obter uma interpretação legível por humanos da combinação desses dois valores cujos bits estão todos armazenados no mesmo valor.
depth()echannels(), em vez de usartype()que retorna uma mistura complexa entre o tipo de dados e o número de canais.