Estoy un poco confundido con el type()
método de Mat
objeto 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
M
es 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
depth
ychans
podrí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_8UC3
significa 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 = 16
pero se supone que no debe usar este número, solo verifiquetype() == CV_8UC3
si 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.h
está 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_8U
clic derecho y seleccionarGo to Definition
para abrir el archivo dondecv::CV_8U
está 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