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

วิธีตรวจจับสีด้วย OpenCV ใน C++


ภาพรวม

สาธิตการ ตรวจจับสี (Color Detection) แบบพื้นฐาน โดยใช้ HSV Color Space และ Trackbar ปรับช่วงค่า HSV แบบ Real-time

ขั้นตอนหลัก

  1. จับภาพจากกล้อง → แปลง BGR → HSV
  2. ใช้ Trackbar 6 ตัว ควบคุม: H Low/High, S Low/High, V Low/High
  3. inRange() สร้าง Mask ตามช่วง HSV
  4. Morphological Operations (Erode/Dilate) กรอง Noise
  5. แสดง Mask (Threshholded) และภาพต้นฉบับ

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

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

int main(int argc, char** argv) {
    VideoCapture video_load(0);
    namedWindow("Adjust");
    
    int Hue_Lower=0, Hue_Upper=22, Sat_Lower=0, Sat_Upper=255, Val_Lower=0, Val_Upper=255;
    createTrackbar("Hue_Lower", "Adjust", &Hue_Lower, 179);
    createTrackbar("Hue_Upper", "Adjust", &Hue_Upper, 179);
    createTrackbar("Sat_Lower", "Adjust", &Sat_Lower, 255);
    createTrackbar("Sat_Upper", "Adjust", &Sat_Upper, 255);
    createTrackbar("Val_Lower", "Adjust", &Val_Lower, 255);
    createTrackbar("Val_Upper", "Adjust", &Val_Upper, 255);
    
    while (true) {
        Mat actual_Image; video_load.read(actual_Image);
        Mat convert_to_HSV; cvtColor(actual_Image, convert_to_HSV, COLOR_BGR2HSV);
        
        Mat detection_screen;
        inRange(convert_to_HSV, Scalar(Hue_Lower, Sat_Lower, Val_Lower), Scalar(Hue_Upper, Sat_Upper, Val_Upper), detection_screen);
        
        // Morphological: Open then Close
        erode(detection_screen, detection_screen, getStructuringElement(MORPH_ELLIPSE, Size(5,5)));
        dilate(detection_screen, detection_screen, getStructuringElement(MORPH_ELLIPSE, Size(5,5)));
        dilate(detection_screen, detection_screen, getStructuringElement(MORPH_ELLIPSE, Size(5,5)));
        erode(detection_screen, detection_screen, getStructuringElement(MORPH_ELLIPSE, Size(5,5)));
        
        imshow("Threshholded Image", detection_screen);
        imshow("Original", actual_Image);
        
        if (waitKey(30) == 27) break;
    }
    return 0;
}

ผลลัพธ์

หน้าต่าง "Adjust" มี Trackbar 6 ตัว ปรับช่วง HSV ได้แบบ Real-time
หน้าต่าง "Threshholded Image" แสดง Mask สีขาว = สีที่ตรวจจับได้
หน้าต่าง "Original" แสดงภาพต้นฉบับ

วิธีตรวจจับสีด้วย OpenCV ใน C++