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_BGR2RGB | BGR → RGB |
| cv2.COLOR_BGR2GRAY | BGR → Grayscale |
| cv2.COLOR_BGR2HSV | BGR → HSV (Hue, Saturation, Value) |
| cv2.COLOR_BGR2YCrCb | BGR → YCrCb (Luminance, Chrominance) |
| cv2.COLOR_BGR2LAB | BGR → L*a*b* (Perceptually uniform) |
| cv2.COLOR_RGB2GRAY | RGB → 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()