2010-01-23 26 views
33

come posso vedere lo spazio colore della mia immagine con OpenCV?rilevare spazio colore con OpenCV

Vorrei essere sicuri che sia RGB, prima di convertire in un altro usando cvCvtColor function()

grazie

+0

vedo qui di seguito si sta tirando le immagini da un telefono. In che formato sono? Non sembra più che stai tracciando le reali strutture 'IplImage' - come stai ottenendo le immagini in OpenCV? – ezod

+0

anche io mi chiedo se le immagini che sto prendendo dalla mia webcam vengano salvate come RGB o BGR? (hai trovato la soluzione per caso?) –

risposta

17

Purtroppo, OpenCV non fornisce alcun tipo di indicazione allo spazio colore nella struttura IplImage, quindi se raccoglierete ciecamente un IplImage da qualche parte, non c'è modo di sapere come è stato codificato. Inoltre, nessun algoritmo può definitivamente dire se l'immagine deve essere interpretato come HSV vs. RGB - è tutto solo un mucchio di byte alla macchina (dovrebbe essere this HSV o RGB?). Ti consiglio di avvolgere i tuoi IplImages in un'altra struttura (o anche in una classe C++ con modelli!) Per aiutarti a tenere traccia di queste informazioni. Se sei veramente disperato e hai a che fare solo con un certo tipo di immagini (scene in esterni, uffici, volti, ecc) si potrebbe provare a calcolare alcune statistiche sulle immagini (ad esempio, costruire le statistiche degli istogrammi per le immagini RGB naturali e alcuni per immagini HSV naturali), quindi prova a classificare la tua immagine completamente sconosciuta confrontando lo spazio cromatico a cui è più vicina l'immagine.

+0

grazie, quindi queste foto sono prese da uno smartphone usando google android. Suppongo che siano immagini RGB, è corretto? RGB è lo spazio colore più comune giusto? grazie – aneuryzm

+2

Anche in questo caso, non c'è davvero modo di dirlo senza visualizzare effettivamente le immagini, ma penso che RGB sia un presupposto piuttosto sicuro: è ciò a cui la maggior parte della gente pensa quando parla di uno spazio colore a tre canali. Sarei abbastanza sorpreso se fosse qualcos'altro. – rcv

3

Il IplImage struct ha un campo denominato colorModel composto da 4 caratteri. Sfortunatamente, OpenCV ignora questo campo. Ma puoi usare questo campo per tenere traccia dei diversi modelli di colore.

6

txandi rende un punto interessante. OpenCV ha uno spazio colori BGR che viene utilizzato di default. Questo è simile allo spazio colore RGB eccetto per il fatto che i canali B e R sono commutati fisicamente nell'immagine. Se l'ordine dei canali fisici è importante per te, dovrai convertire la tua immagine con questa funzione: cvCvtColor (defaultBGR, imageRGB, CV_BGR2RGB).

2

Come Boatzart detto, non esiste un metodo per rilevare a livello di codice lo spazio colore ispezionando i tre canali di colore, se non avete a priori conoscenza del contenuto dell'immagine (per esempio, v'è un marcatore nell'immagine il cui colore è conosciuto). Se si accettano immagini da fonti sconosciute, è necessario consentire all'utente di specificare lo spazio colore della propria immagine. Un buon default sarebbe assumere RGB.

Se si modifica uno qualsiasi dei colori dei pixel prima della visualizzazione e si utilizza un visualizzatore non OpenCV, è consigliabile utilizzare cvCvtColor(src,dst,CV_BGR2RGB) dopo aver eseguito tutti i filtri colore. Se stai usando OpenCV per il visualizzatore o salverai le immagini su file, dovresti assicurarti che siano nello spazio colore BGR.

Problemi correlati