Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Imej yang Dimuatkan OpenCV Memaparkan Warna Tidak Tepat dalam Matplotlib?

Mengapa Imej yang Dimuatkan OpenCV Memaparkan Warna Tidak Tepat dalam Matplotlib?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-24 18:44:49649semak imbas

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

Percanggahan Warna OpenCV: Menyelesaikan Jurang antara Imej yang Dimuatkan dan Diplot

Apabila menggunakan OpenCV untuk memuatkan imej berwarna dan memaparkannya menggunakan Matplotlib, ia bukan jarang ditemui percanggahan dalam warna yang dipaparkan. Ini disebabkan oleh perbezaan dalam pesanan warna lalai antara OpenCV dan Matplotlib.

OpenCV menyimpan imej dalam format Biru-Hijau-Merah (BGR), manakala Matplotlib menjangkakan imej dalam Merah-Hijau-Biru (RGB) format. Apabila memaparkan imej yang dimuatkan dengan OpenCV dalam Matplotlib, saluran warna diterbalikkan, mengakibatkan warna yang salah.

Penyelesaian: Menukar BGR kepada RGB

Untuk membetulkan isu ini, kami perlu menukar secara eksplisit imej yang dimuatkan daripada BGR kepada RGB menggunakan fungsi cvtColor OpenCV.

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

Dengan menggunakan RGB_img dalam plot Matplotlib dan bukannya img asal, kami memastikan susunan warna sepadan dengan jangkaan Matplotlib , dan warna dipaparkan dengan betul.

Kod Kemas Kini

<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>

Atas ialah kandungan terperinci Mengapa Imej yang Dimuatkan OpenCV Memaparkan Warna Tidak Tepat dalam Matplotlib?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn