Estou meio confuso com o type()
método do Mat
objeto no OpenCV.
Se eu tiver as seguintes linhas:
mat = imread("C:\someimage.jpg");
type = mat.type();
e type = 16
. Como faço para descobrir que tipo de matriz de esteira é ?.
Tentei encontrar a resposta em seu manual ou em alguns livros em vão.
opencv
opencv-mat
Tae-Sung Shin
fonte
fonte
depth()
echannels()
, em vez de usartype()
que retorna uma mistura complexa entre o tipo de dados e o número de canais.depth()
códigos comuns , o que é muito mais difíciltype()
.Respostas:
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.
Se
M
for uma var do tipo,Mat
você pode chamá-lo assim:Produzirá dados como:
É importante notar que também existem métodos Matrix
Mat::depth()
eMat::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.fonte
depth
echans
você pode usar as macrosCV_MAT_DEPTH(type)
eCV_MAT_CN(type)
, respectivamente. Seu tipo também deve serint
, o que permitirá que você use emto_string(chans)
vez dechans+'0'
.Para fins de depuração, caso você queira procurar um Mat :: type bruto em um depurador:
Portanto, por exemplo, se tipo = 30, o tipo de dados OpenCV é CV_64FC4. Se tipo = 50, o tipo de dados OpenCV é CV_16UC (7).
fonte
No cabeçalho OpenCV " types_c.h " há um conjunto de definições que os geram, o formato é
CV_bits{U|S|F}C<number_of_channels>
Então, por exemplo,
CV_8UC3
significa caracteres sem sinal de 8 bits, 3 canais de cores - cada um desses nomes mapeia para um inteiro arbitrário com as macros naquele arquivo.Editar: Veja " types_c.h " por exemplo:
Então,
CV_8UC3 = 16
mas você não deve usar esse número, apenas verifiquetype() == CV_8UC3
se você precisa saber qual é o tipo de um array OpenCV interno.Lembre-se de que o OpenCV irá converter o jpeg em BGR (ou escala de cinza se você passar '0' para
imread
) - então ele não informa nada sobre o arquivo original.fonte
types_c.h
está localizado no módulo principal, por exemplo, se você tiver o OpenCV instalado diretamente na unidade C em uma pasta opencv_2.4.11, o arquivo de cabeçalho estará em C: \ opencv_2.4.11 \ build \ include \ opencv2 \ core \ types_c .hcv::CV_8U
com o botão direito e selecionarGo to Definition
para abrir o arquivo ondecv::CV_8U
está definidotypes_c.h
.Eu sempre uso este link para ver que tipo é o número que obtenho com
type()
:LISTA DE TIPO DE MAT EM OPENCV
Espero que isso possa ajudá-lo.
fonte
Eu adicionei alguma usabilidade à função da resposta de @Octopus, para fins de depuração.
fonte
Algumas pessoas responderam a essa pergunta, mas encontrei uma solução que funcionou muito bem para mim.
fonte