Domanda

Capisco RGB --- valore (0-255) rosso, (0-255) verde, (0-255) Blu per formare un colore.

Che cosa è esattamente BGR spazio colore?

Come è diverso dallo spazio colore RGB?

È stato utile?

Soluzione

RGB sta per Rosso Verde Blu. Il più delle volte, un colore RGB è memorizzato in una struttura o un numero intero senza segno con Blue occupando la "zona" meno significativo (un byte in formato a 32 bit e 24-bit), verde il secondo minimo, e Red il terzo minimo.

BGR è lo stesso, tranne l'ordine delle aree è invertito. Rosso occupa l'area meno significativo, verde la seconda (ancora), e il terzo blu.

Su alcune piattaforme (ad esempio la Gamegear ) un modello BGR viene utilizzato. Tuttavia, per la maggior parte, come il computer, RGB viene utilizzato [citazione necessaria] (anche se BGR è supportato da molte API grafiche di per la compatibilità). Non sono sicuro di perché esattamente SI USA; Probabilmente storico.

Esempio: (! Numeri vengono lette da destra a sinistra) # FF0000 è puro rosso quando letta come un colore RGB esadecimale (#RRGGBB), in quanto la terza area è FF (valore massimo, a colori) e le altre due aree sono 00 (valore minimo, nessun colore). Se # FF0000 sono stati letti come un colore esadecimale BGR, sarebbe blu puro.

Altri suggerimenti

I suoi circa endianness .

RGB è un ordine dei byte. Ma una scelta deliberata implementazione della maggior parte delle librerie grafiche di vaniglia è che trattano i colori come unsigned interi a 32 bit internamente, con i tre (o quattro, come alfa è in genere compreso) componenti confezionati in numero intero.

Su una macchina little endian-(ad esempio 86) il 0x01020304 intero sarà effettivamente memorizzato nella memoria, come 0x04030201. E così 0x00BBGGRR verrà memorizzato come 0xRRGGBB00!

Quindi, il termine BGR (e BGRA ecc) è un'astrazione che perde in cui la libreria grafica sta spiegando come l'intero è logicamente ordinata, in modo da rendere il codice che accede direttamente i componenti di colore singolarmente più leggibile.

Ricordate che i bitmap sono di solito accessibili da più parti l'hardware che il vostro processore, e l'endian specificato da, diciamo, schede video tradizionali, non è necessariamente lo stesso del Endian della CPU. A livello di manipolare i canali nel pixel non è un problema per una CPU per estrarre i campi qualunque sia il loro ordine; il suo puramente un programmatore comprendere la cosa etichettatura.

Si tratta del modo in cui i componenti del colore sono disposti in memoria. Per BGR l'ordine è BGRBGRBGRBGR ..., e per RGB l'ordine è RGBRGBRGB ... Per BGR, l'ordine predefinito per OpenCV, è come questo:

entrare descrizione dell'immagine qui (Vedere la documentazione OpenCV per Come la matrice immagine viene memorizzata nella memoria? )

Si notino le altre risposte hanno fatto riferimento a determinati colori essendo un significato almeno o la maggior parte, ma che in realtà dipende dal endianness della vostra macchina. E l'ordine di imballaggio di componenti in un unsigned int, per esempio, in realtà dipende dal vostro software, o la libreria che si sta utilizzando. Tuttavia, indipendentemente dalla vostra libreria o gli ordine dei byte della vostra macchina, per BGR pixel l'indirizzo di byte del componente B colore sarà uno in meno rispetto a G e e due di meno che per R (e per RGB è proprio il contrario ).

E 'solo RGB in un ordine più strettamente controllato, indipendentemente endianness. Conversione tra loro è semplice una volta che si conosce l'endianness del vostro ambiente.

Il BGR è una rappresentazione a 24 bit in cui il-indirizzata 8 bit inferiori sono blu, il successivo indirizzata 8 sono verdi e superiori indirizzata 8 sono rossi.

valori RGB tendono ad essere scritta come RGB (r, g, b) quando i valori r / g / b sono tra 0 e 255 compreso o come #rrggbb, dove rr / gg / bb sono valori esadecimali a 8-bit. Tutti i valori BGR che ho visto tendono ad essere semplici numeri interi compresi tra 0 e 16777215 (0xffffff).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top