Espaces colorimétriques dans OpenCV | Python
Les espaces colorimétriques sont un moyen de représenter les canaux de couleur présents dans l’image qui donnent à l’image cette teinte particulière. Il existe plusieurs espaces de couleurs différents et chacun a sa propre signification.
Certains des espaces colorimétriques populaires sont RVB (rouge, vert, bleu), CMJN (cyan, magenta, jaune, noir), HSV (teinte, saturation, valeur), etc.
Espace colorimétrique BGR : l’espace colorimétrique par défaut d’OpenCV est RVB. Cependant, il stocke en fait la couleur au format BGR. C’est un modèle de couleur additive où les différentes intensités de bleu, vert et rouge donnent différentes nuances de couleur.
Espace colorimétrique HSV : Il stocke les informations de couleur dans une représentation cylindrique des points de couleur RVB. Il tente de représenter les couleurs telles qu’elles sont perçues par l’œil humain. La valeur de teinte varie de 0 à 179, la valeur de saturation varie de 0 à 255 et la valeur de valeur varie de 0 à 255. Il est principalement utilisé à des fins de segmentation des couleurs.
Espace colorimétrique CMJN : Contrairement au RVB, il s’agit d’un espace colorimétrique soustractif. Le modèle CMJN fonctionne en masquant partiellement ou entièrement les couleurs sur un fond plus clair, généralement blanc. L’encre réduit la lumière qui serait autrement réfléchie. Un tel modèle est dit soustractif car les encres « soustraient » les couleurs rouge, vert et bleu de la lumière blanche. Lumière blanche moins feuilles rouges cyan, lumière blanche moins feuilles vertes magenta et lumière blanche moins feuilles bleues jaunes.
- YUV : Même si RVB est bon à de nombreuses fins, il a tendanceêtre très limité pour de nombreuses applications réelles. Les gens ont commencé à réfléchir à différentes méthodes pour séparer les informations d’intensité des informations de couleur. Par conséquent, ils ont créé l’espace colorimétrique YUV. Y fait référence à la luminance ou à l’intensité, et les canaux U/V représentent les informations de couleur. Cela fonctionne bien dans de nombreuses applications car le système visuel humain perçoit les informations d’intensité très différemment des informations de couleur.
Visualiser les différents canaux de couleur d’une image RVB:
[pastacode lang=”python” manual=”import%20cv2%0Aimport%20matplotlib.pyplot%20as%20plt%0Afrom%20matplotlib.pyplot%20import%20*%0A%20%20%0Aimage%20%3D%20cv2.imread(‘%2Fcontent%2Fprofil.jpeg’)%0Aimage%3Dcv2.cvtColor(image%2C%20cv2.COLOR_BGR2RGB)%0AR%2C%20G%2C%20B%20%3D%20cv2.split(image)%0A%0Afigure(figsize%3D(9%2C6))%0Aplt.subplot(141)%2Cimshow(image)%2Cplt.title(‘Image%20originale’)%0Aplt.axis(‘off’)%0Aplt.subplot(142)%2Cimshow(B)%2Cplt.title(‘Canal%20rouge’)%0Aplt.axis(‘off’)%0Aplt.subplot(143)%2C%20imshow(G)%2C%20plt.title(‘Canal%20vert’)%0Aplt.axis(‘off’)%0Aplt.subplot(144)%2Cimshow(R)%2Cplt.title(‘Canal%20bleu’)%0Aplt.axis(‘off’)” message=”Visualiser les différents canaux de couleur d’une image RVB.” highlight=”” provider=”manual”/]
Nous utilisons la fonction
pour convertir entre les espaces colorimétriques. Le premier argument est l’image d’entrée et le deuxième argument spécifie la conversion de l’espace colorimétrique. Vous pouvez convertir en YUV en utilisant l’indicateur suivant :
image=cv2.cvtColor(image, cv2.COLOR_RGB2YUV)
Voici un exemple de code permettant de changer l’espace colorimétrique:
[pastacode lang=”python” manual=”import%20cv2%0Aimport%20matplotlib.pyplot%20as%20plt%0Afrom%20matplotlib.pyplot%20import%20*%0A%20%20%0Aimage%20%3D%20cv2.imread(‘%2Fcontent%2Fprofil.jpeg’)%0Aimage%3Dcv2.cvtColor(image%2C%20cv2.COLOR_BGR2RGB)%0Aimage1%3Dcv2.cvtColor(image%2C%20cv2.COLOR_RGB2GRAY)%0Aimage2%3Dcv2.cvtColor(image%2C%20cv2.COLOR_RGB2HSV)%0Aimage3%3Dcv2.cvtColor(image%2C%20cv2.COLOR_RGB2XYZ)%0Aimage4%3Dcv2.cvtColor(image%2C%20cv2.COLOR_RGB2YCrCb)%0Aimage5%3Dcv2.cvtColor(image%2C%20cv2.COLOR_RGB2YUV)%0Aimage6%3Dcv2.cvtColor(image%2C%20cv2.COLOR_RGB2Lab)%0Aimage7%3Dcv2.cvtColor(image%2C%20cv2.COLOR_RGB2LUV)%0Afigure(figsize%3D(10%2C8))%0Aplt.subplot(441)%2Cimshow(image)%2Cplt.title(‘Image%20originale’)%0Aplt.axis(‘off’)%0Aplt.subplot(442)%2Cimshow(image1)%2Cplt.title(‘RGB%20vers%20GRAY’)%0Aplt.axis(‘off’)%0Aplt.subplot(443)%2C%20imshow(image2)%2C%20plt.title(‘RGB%20vers%20HSV’)%0Aplt.axis(‘off’)%0Aplt.subplot(444)%2Cimshow(image3)%2Cplt.title(‘RGB%20vers%20XYZ’)%0Aplt.axis(‘off’)%0Aplt.subplot(445)%2Cimshow(image4)%2Cplt.title(‘RGB%20vers%20YCrCb’)%0Aplt.axis(‘off’)%0Aplt.subplot(446)%2Cimshow(image5)%2Cplt.title(‘RGB%20vers%20YUV’)%0Aplt.axis(‘off’)%0Aplt.subplot(447)%2C%20imshow(image6)%2C%20plt.title(‘RGB%20vers%20Lab’)%0Aplt.axis(‘off’)%0Aplt.subplot(448)%2Cimshow(image7)%2Cplt.title(‘RGB%20vers%20LUV’)%0Aplt.axis(‘off’)” message=”” highlight=”” provider=”manual”/]