Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ความแตกต่างระหว่าง plt.show และ cv2.imshow ใน Matplotlib

ความแตกต่างหลักคือลำดับช่องสี (color channel): Matplotlib (plt.imread) อ่านภาพเป็น RGB ในขณะที่ OpenCV (cv2.imread) อ่านเป็น BGR (สลับสีแดง-น้ำเงิน) ทำให้ภาพจาก cv2 แสดงผิดสีหากพลอตด้วย plt.imshow โดยไม่แปลง

ขั้นตอนการทดสอบ

  1. ตั้งค่าขนาดรูปและเลย์เอาต์
  2. สร้างซับพลอต 1 แถว 2 คอลัมน์
  3. อ่านภาพด้วย cv2 แสดงด้านซ้าย (จะผิดสี)
  4. อ่านภาพด้วย plt.imread แสดงด้านขวา (สีถูกต้อง)
  5. ปิดแกนและแสดงตำนาน

ตัวอย่างโค้ด

import cv2
from matplotlib import pyplot as plt, image

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

filename = "bird.jpg"

plt.subplot(121)
img = cv2.imread(filename)
plt.axis("off")
plt.imshow(img)
plt.title("with cv2 (BGR)")

plt.subplot(122)
img = image.imread(filename)
plt.axis("off")
plt.imshow(img)
plt.title("with plt (RGB)")

plt.show()

ผลลัพธ์

ความแตกต่างระหว่าง plt.show และ cv2.imshow ใน Matplotlib

หมายเหตุ

หากใช้ cv2.imread ต้องแปลงสีด้วย cv2.cvtColor(img, cv2.COLOR_BGR2RGB) ก่อนพลอตด้วย Matplotlib