2010-01-23 18 views
33

¿cómo puedo ver el espacio de color de mi imagen con openCV?detectar espacio de color con openCV

me gustaría estar seguro de que es RGB, antes de convertir a otro usando cvCvtColor función()

gracias

+0

Veo a continuación está sacando las imágenes de un teléfono. ¿En qué formato están? Ya no suena como si estuvieras tirando estructuras reales de 'IplImage': ¿cómo estás obteniendo las imágenes en OpenCV? – ezod

+0

Incluso me pregunto si las imágenes que estoy tomando de mi cámara web se guardan como RGB o BGR? (¿Encontraste tu solución por casualidad?) –

Respuesta

17

Desafortunadamente, OpenCV no proporciona ningún tipo de indicación en cuanto al espacio de color en la estructura de IplImage, por lo que si retienes ciegamente una IplImage desde algún lugar, simplemente no hay forma de saber cómo fue codificada. Además, ningún algoritmo puede decir definitivamente si una imagen debe interpretarse como HSV frente a RGB: todo es solo un montón de bytes para la máquina (¿debería this ser HSV o RGB?). Te recomiendo que envuelvas tus IplImages en otra estructura (¡o incluso en una clase de C++ con plantillas!) Para ayudarte a hacer un seguimiento de esta información. Si estás realmente desesperado y solo tratas con cierto tipo de imágenes (escenas al aire libre, oficinas, caras, etc.) puedes intentar calcular algunas estadísticas en tus imágenes (por ejemplo, construir estadísticas de histogramas para imágenes RGB naturales y otras para imágenes HSV naturales), y luego intente clasificar su imagen totalmente desconocida comparando el espacio de color al que se acerca su imagen.

+0

gracias, por lo que estas imágenes son tomadas por un teléfono inteligente usando Google android. Supongo que son imágenes RGB, ¿es correcto? RGB es el espacio de color más común, ¿verdad? gracias – aneuryzm

+2

Una vez más, realmente no hay manera de saber sin mostrar las imágenes, pero creo que RGB es una suposición bastante segura, es lo que la mayoría de la gente piensa cuando hablan sobre un espacio de color de tres canales. Me sorprendería mucho si fuera algo más. – rcv

3

El IplImage struct tiene un campo llamado colorModel que consta de 4 caracteres. Desafortunadamente, OpenCV ignora este campo. Pero puede usar este campo para realizar un seguimiento de los diferentes modelos de color.

6

txandi es un punto interesante. OpenCV tiene un espacio de color BGR que se utiliza de forma predeterminada. Esto es similar al espacio de color RGB, excepto que los canales B y R se cambian físicamente en la imagen. Si el orden de los canales físicos es importante para usted, necesitará convertir su imagen con esta función: cvCvtColor (defaultBGR, imageRGB, CV_BGR2RGB).

2

Como Boatzart Dicho esto, no existe un método para detectar programación el espacio de color mediante la inspección de los tres canales de color, a menos que tenga a priori conocimiento del contenido de la imagen (por ejemplo, hay un marcador en la imagen cuyo color es conocido). Si va a aceptar imágenes de fuentes desconocidas, debe permitir que el usuario especifique el espacio de color de su imagen. Un buen valor predeterminado sería asumir RGB.

Si modifica alguno de los colores de los píxeles antes de la visualización y está utilizando un visor que no es de OpenCV, probablemente debería usar cvCvtColor(src,dst,CV_BGR2RGB) después de haber terminado de ejecutar todos sus filtros de color. Si está utilizando OpenCV para el visor o guardará las imágenes en un archivo, debe asegurarse de que estén en el espacio de color de BGR.

Cuestiones relacionadas