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

วิธีแยกช่องสี (Split Channels) ใน OpenCV C++

บทนำ

ภาพ RGB มี 3 ช่องสี: Blue, Green, Red (OpenCV ใช้ลำดับ BGR) ฟังก์ชัน split() ใช้แยกภาพหลายช่องสีเป็นภาพ Single Channel หลายภาพ

Syntax

split(src, mv); // mv คือ vector<Mat> หรือ Mat array[3]

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

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;

int main() {
    Mat src;
    Mat channels[3]; // อาร์เรย์ 3 เมทริกซ์
    
    src = imread("RGB.png");
    split(src, channels); // แยกช่องสี
    
    Mat b = channels[0]; // Blue channel
    Mat g = channels[1]; // Green channel
    Mat r = channels[2]; // Red channel
    
    imshow("Blue Channel", b);
    imshow("Green Channel", g);
    imshow("Red Channel", r);
    imshow("Actual_Image", src);
    
    waitKey(0);
    destroyAllWindows();
    return 0;
}

ฟังก์ชันคู่กัน: merge()

// รวม 3 ช่องกลับเป็นภาพสี
Mat merged;
Mat channels[] = {b, g, r};
merge(channels, 3, merged);

การประยุกต์: ปรับแต่งช่องสีเดี่ยว

// เพิ่มความสว่างเฉพาะช่อง Red
channels[2] = channels[2] + 50; // หรือใช้ add()
merge(channels, 3, result);

ผลลัพธ์

วิธีแยกช่องสี (Split Channels) ใน OpenCV C++

สรุป

  • split(): แยก Multi-channel → Multiple Single-channel
  • merge(): รวม Multiple Single-channel → Multi-channel
  • OpenCV ใช้ลำดับ BGR (0=Blue, 1=Green, 2=Red)
  • แต่ละช่องหลัง split เป็น Grayscale image แสดงความเข้มของสีนั้น