Pergunta

Como posso ver o espaço de cores da minha imagem com OpenCV?

Eu gostaria de ter certeza de que é RGB, antes de converter para outro usando função cvcvtcolor ()

obrigado

Foi útil?

Solução

Infelizmente, o OpenCV não fornece nenhum tipo de indicação sobre o espaço de cores na estrutura da iplimagem; portanto, se você pegar cegamente uma iplimagem de algum lugar, não há como saber como ela foi codificada. Além disso, nenhum algoritmo pode definitivamente dizer se uma imagem deve ser interpretada como HSV vs. RGB - é apenas um monte de bytes da máquina (deveria isto ser hsv ou rgb?). Eu recomendo que você envolva suas iplimagens em outra estrutura (ou mesmo uma classe C ++ com modelos!) Para ajudá -lo a acompanhar essas informações. Se você está realmente desesperado e está lidando apenas com um certo tipo de imagens (cenas ao ar livre, escritórios, rostos etc.), você pode tentar calcular algumas estatísticas em suas imagens (por exemplo, estatísticas de histograma de construção para imagens naturais de RGB e algumas para Imagens naturais do HSV) e, em seguida, tente classificar sua imagem totalmente desconhecida, comparando qual espaço de cores sua imagem está mais próxima.

Outras dicas

Txandi faz um ponto interessante. O OpenCV possui um espaço de cores BGR usado por padrão. Isso é semelhante ao espaço de cores RGB, exceto que os canais B e R são fisicamente alternados na imagem. Se a ordem do canal físico for importante para você, você precisará converter sua imagem com esta função: cvcvtcolor (DefaultBGR, Imagergb, CV_BGR2RGB).

o Iplimage Struct tem um campo chamado colorModel consistindo em 4 chars. Infelizmente, o OpenCV ignora esse campo. Mas você pode usar esse campo para acompanhar diferentes modelos de cores.

Como RCV disse, não há método para detectar programaticamente o espaço de cores inspecionando os três canais de cores, a menos que você tenha a priori Conhecimento do conteúdo da imagem (por exemplo, há um marcador na imagem cuja cor é conhecida). Se você aceitar imagens de fontes desconhecidas, permitirá que o usuário especifique o espaço de cores da imagem deles. Um bom padrão seria assumir o RGB.

Se você modificar alguma das cores do pixel antes da exibição e estiver usando um visualizador que não seja opencv, provavelmente deve usar cvCvtColor(src,dst,CV_BGR2RGB) Depois de terminar de executar todos os seus filtros de cores. Se você estiver usando o OpenCV para o visualizador ou estará salvando as imagens para arquivar, verifique se elas estão no BGR Color Space.

Basicamente, divido os canais e exibo cada um para descobrir o espaço de cores da imagem que estou usando. Pode não ser a melhor maneira, mas funciona para mim.

Para uma explicação detalhada, você pode consultar o link abaixo.

https://dryrungarage.wordpress.com/2018/03/11/image-processing-basics/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top