Rumah > pembangunan bahagian belakang > Tutorial Python > 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
Lepaskan: 2024-10-24 18:44:49
asal
739 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan