บทนำ
Color Space คือโมเดลการแทนสี เช่น RGB, HSV, YCrCb, Grayscale, Lab เป็นต้น OpenCV ใช้ฟังก์ชัน cvtColor() ใน header <opencv2/imgproc/imgproc.hpp> สำหรับการแปลง
Syntax
cvtColor(src, dst, code);
ตัวอย่าง: RGB → Grayscale
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main() {
Mat src, dst;
namedWindow("Actual_Image");
namedWindow("Converted_Image");
src = imread("cat.jpg");
cvtColor(src, dst, COLOR_RGB2GRAY); // หรือ COLOR_BGR2GRAY
imshow("Actual_Image", src);
imshow("Converted_Image", dst);
waitKey(0);
destroyAllWindows();
return 0;
}
Color Conversion Codes ที่ใช้บ่อย
| Code | การแปลง | คำอธิบาย |
|---|---|---|
| COLOR_BGR2GRAY | BGR → Grayscale | OpenCV ใช้ BGR เป็นค่าเริ่มต้น |
| COLOR_BGR2HSV | BGR → HSV | Hue, Saturation, Value - ใช้ใน Color Segmentation |
| COLOR_BGR2Lab | BGR → Lab | Lightness, a, b - ใกล้เคียงการรับรู้สายตา |
| COLOR_BGR2YCrCb | BGR → YCrCb | Luma, Chroma - ใช้ใน Video/JPEG |
| COLOR_BGR2RGB | BGR → RGB | สลับช่องสี R และ B |
| COLOR_GRAY2BGR | Grayscale → BGR | 複製 1 ช่องเป็น 3 ช่อง |
| COLOR_HSV2BGR | HSV → BGR | แปลงกลับ |
ข้อควรระวัง
- OpenCV ใช้ BGR ไม่ใช่ RGB ต้องใช้ COLOR_BGR2xxx
- HSV ใน OpenCV: H=0-179 (ไม่ใช่ 0-360), S=0-255, V=0-255
- การแปลงบางครั้งสูญเสียข้อมูล (เช่น RGB→GRAY ไม่กลับมาเป็นสีได้)
ผลลัพธ์

การประยุกต์ใช้
- HSV: Color detection, Skin detection, Color tracking
- Lab: Color transfer, Illumination normalization
- YCrCb: Face detection, Skin detection (ในบางกรณีดีกว่า HSV)
- Grayscale: Edge detection, Feature extraction, Preprocessing