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

Python - การแสดงภาพใน Color Spaces ต่างๆ ด้วย OpenCV

OpenCV-Python เป็นไลบรารี Python bindings สำหรับแก้ปัญหา Computer Vision ใช้ NumPy เป็นพื้นฐาน ทำให้ดำเนินการตัวเลขได้อย่างมีประสิทธิภาพ โครงสร้างอาร์เรย์ของ OpenCV แปลงเป็น NumPy arrays ได้โดยตรง

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

1. อ่านภาพเป็น RGB (ค่าเริ่มต้นของ OpenCV คือ BGR)


import cv2
import matplotlib.pyplot as plt

# อ่านภาพ (OpenCV อ่านเป็น BGR)
img = cv2.imread('download.png')

# แสดงด้วย matplotlib (คาดหวัง RGB)
plt.imshow(img)
plt.title("RGB (OpenCV default BGR)")
plt.show()

2. อ่านภาพเป็น Grayscale


import cv2

# อ่านเป็น grayscale โดยตรง (flag = 0)
img = cv2.imread('download.png', 0)

# หรือแปลงจาก BGR
img = cv2.imread('download.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. แปลงเป็น YCrCb Color Space


import cv2

img = cv2.imread('download.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)

cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. แปลงเป็น HSV Color Space


import cv2

img = cv2.imread('download.png')
img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

5. Heatmap และ Spectral Map ด้วย Matplotlib


import matplotlib.pyplot as plt
import cv2

img = cv2.imread('download.png')

# Heatmap (cmap='hot')
plt.imshow(img, cmap='hot')
plt.colorbar()
plt.title("Heatmap")
plt.show()

# Spectral map
plt.imshow(img, cmap='nipy_spectral')
plt.colorbar()
plt.title("Spectral")
plt.show()

Color Space Conversion Codes หลัก

Codeคำอธิบาย
cv2.COLOR_BGR2RGBBGR → RGB
cv2.COLOR_BGR2GRAYBGR → Grayscale
cv2.COLOR_BGR2HSVBGR → HSV (Hue, Saturation, Value)
cv2.COLOR_BGR2YCrCbBGR → YCrCb (Luminance, Chrominance)
cv2.COLOR_BGR2LABBGR → L*a*b* (Perceptually uniform)
cv2.COLOR_RGB2GRAYRGB → Grayscale

หมายเหตุสำคัญ

  • OpenCV ใช้ BGR เป็นค่าเริ่มต้น ไม่ใช่ RGB ต้องแปลงก่อนแสดงด้วย matplotlib
  • cv2.imshow() แสดง BGR ได้ปกติ แต่ matplotlib คาดหวัง RGB
  • HSV เหมาะสำหรับ color segmentation (แยกสี)
  • YCrCb ใช้ใน video compression และ skin detection
  • L*a*b* ใช้เมื่อต้องการ color difference ที่สอดคล้องกับการมองเห็นของมนุษย์

แสดงทุก Color Space พร้อมกัน


import cv2
import matplotlib.pyplot as plt

img = cv2.imread('download.png')
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

spaces = {
    'RGB': img_rgb,
    'GRAY': cv2.cvtColor(img, cv2.COLOR_BGR2GRAY),
    'HSV': cv2.cvtColor(img, cv2.COLOR_BGR2HSV),
    'YCrCb': cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb),
    'LAB': cv2.cvtColor(img, cv2.COLOR_BGR2LAB),
}

fig, axes = plt.subplots(2, 3, figsize=(12, 8))
for ax, (name, converted) in zip(axes.flat, spaces.items()):
    if len(converted.shape) == 2:
        ax.imshow(converted, cmap='gray')
    else:
        ax.imshow(converted)
    ax.set_title(name)
    ax.axis('off')
plt.tight_layout()
plt.show()