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

วิธีแปลง Color Space ใน OpenCV C++

บทนำ

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_BGR2GRAYBGR → GrayscaleOpenCV ใช้ BGR เป็นค่าเริ่มต้น
COLOR_BGR2HSVBGR → HSVHue, Saturation, Value - ใช้ใน Color Segmentation
COLOR_BGR2LabBGR → LabLightness, a, b - ใกล้เคียงการรับรู้สายตา
COLOR_BGR2YCrCbBGR → YCrCbLuma, Chroma - ใช้ใน Video/JPEG
COLOR_BGR2RGBBGR → RGBสลับช่องสี R และ B
COLOR_GRAY2BGRGrayscale → BGR複製 1 ช่องเป็น 3 ช่อง
COLOR_HSV2BGRHSV → BGRแปลงกลับ

ข้อควรระวัง

  • OpenCV ใช้ BGR ไม่ใช่ RGB ต้องใช้ COLOR_BGR2xxx
  • HSV ใน OpenCV: H=0-179 (ไม่ใช่ 0-360), S=0-255, V=0-255
  • การแปลงบางครั้งสูญเสียข้อมูล (เช่น RGB→GRAY ไม่กลับมาเป็นสีได้)

ผลลัพธ์

วิธีแปลง Color Space ใน OpenCV C++

การประยุกต์ใช้

  • HSV: Color detection, Skin detection, Color tracking
  • Lab: Color transfer, Illumination normalization
  • YCrCb: Face detection, Skin detection (ในบางกรณีดีกว่า HSV)
  • Grayscale: Edge detection, Feature extraction, Preprocessing