Estoy un poco confundido con el type()método de Matobjeto en OpenCV.
Si tengo las siguientes líneas:
mat = imread("C:\someimage.jpg");
type = mat.type();
y type = 16. ¿Cómo averiguo qué tipo de matriz de tapete es ?.
Intenté encontrar la respuesta en su manual o en un par de libros en vano.
opencv
opencv-mat
Tae-Sung Shin
fuente
fuente

depth()ychannels(), en lugar de usartype()que devuelve una combinación compleja entre el tipo de datos y el número de canales.depth()códigos comunes , que es mucho más difíciltype().Respuestas:
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.
Si
Mes una var de tipoMat, puede llamarlo así:Dará salida a datos como:
Vale la pena señalar que también existen métodos Matrix
Mat::depth()yMat::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.fuente
depthychanspodría usar las macrosCV_MAT_DEPTH(type)yCV_MAT_CN(type), respectivamente. Su tipo también debería serint, lo que le permitiría usar ento_string(chans)lugar dechans+'0'.Para fines de depuración en caso de que desee buscar un Mat sin formato: escriba un depurador:
Entonces, por ejemplo, si type = 30, entonces el tipo de datos OpenCV es CV_64FC4. Si type = 50, entonces el tipo de datos OpenCV es CV_16UC (7).
fuente
En el encabezado OpenCV " types_c.h " hay un conjunto de definiciones que las generan, el formato es
CV_bits{U|S|F}C<number_of_channels>Entonces, por ejemplo,
CV_8UC3significa caracteres sin firmar de 8 bits, 3 canales de color: cada uno de estos nombres se asigna a un entero arbitrario con las macros en ese archivo.Editar: consulte " types_c.h " por ejemplo:
Entonces,
CV_8UC3 = 16pero se supone que no debe usar este número, solo verifiquetype() == CV_8UC3si necesita saber qué tipo es una matriz OpenCV interna.Recuerde que OpenCV convertirá el jpeg en BGR (o escala de grises si pasa '0' a
imread), por lo que no le dice nada sobre el archivo original.fuente
types_c.hestá ubicado en el módulo principal, por ejemplo, si tiene OpenCV instalado directamente en la unidad C en una carpeta opencv_2.4.11, el archivo de encabezado estaría en C: \ opencv_2.4.11 \ build \ include \ opencv2 \ core \ types_c .hcv::CV_8Uclic derecho y seleccionarGo to Definitionpara abrir el archivo dondecv::CV_8Uestá definidotypes_c.h.Siempre uso este enlace para ver qué tipo es el número con el que obtengo
type():LISTA DE TIPO DE MAT EN OPENCV
Espero que esto pueda ayudarlo.
fuente
Agregué algo de usabilidad a la función de la respuesta de @Octopus, para fines de depuración.
fuente
Esto fue respondido por algunos otros, pero encontré una solución que funcionó muy bien para mí.
fuente