Maison >développement back-end >Tutoriel Python >Pourquoi les images chargées par OpenCV affichent-elles des couleurs inexactes dans Matplotlib ?

Pourquoi les images chargées par OpenCV affichent-elles des couleurs inexactes dans Matplotlib ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-24 18:44:49739parcourir

Why Do OpenCV-Loaded Images Display Inaccurate Colors in Matplotlib?

Différence de couleur OpenCV : résoudre la disparité entre les images chargées et tracées

Lorsque vous utilisez OpenCV pour charger des images couleur et les afficher à l'aide de Matplotlib, ce n'est pas le cas. Il est rare de rencontrer des écarts dans les couleurs affichées. Cela est dû à la différence dans les ordres de couleurs par défaut entre OpenCV et Matplotlib.

OpenCV stocke les images au format Bleu-Vert-Rouge (BGR), tandis que Matplotlib attend les images au format Rouge-Vert-Bleu (RVB). format. Lors de l'affichage d'une image chargée avec OpenCV dans Matplotlib, les canaux de couleur sont inversés, ce qui entraîne des couleurs incorrectes.

Solution : Conversion de BGR en RVB

Pour corriger ce problème, nous devons convertir explicitement l'image chargée de BGR en RVB à l'aide de la fonction cvtColor d'OpenCV.

<code class="python">RGB_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)</code>

En utilisant RGB_img dans le tracé Matplotlib au lieu de l'img d'origine, nous nous assurons que l'ordre des couleurs correspond aux attentes de Matplotlib , et les couleurs s'affichent correctement.

Code mis à jour

<code class="python">import cv2
import matplotlib.pyplot as plt

# Load image with BGR order (default for OpenCV)
img = cv2.imread('lena_caption.png', cv2.IMREAD_COLOR)

# Convert BGR to RGB for compatibility with Matplotlib
RGB_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# Create grayscale image
bw_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Create figure for plotting
fig, axes = plt.subplots(1, 2)

# Plot original image with corrected color order
axes[0].imshow(RGB_img)
axes[0].set_title('Original Image (RGB)')
axes[0].set_xticks([]); axes[0].set_yticks([])

# Plot grayscale image
axes[1].imshow(bw_img, cmap='gray')
axes[1].set_title('BW Image')
axes[1].set_xticks([]); axes[1].set_yticks([])

plt.show()</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn