ภาพรวม
สาธิตการ ตรวจจับสี (Color Detection) แบบพื้นฐาน โดยใช้ HSV Color Space และ Trackbar ปรับช่วงค่า HSV แบบ Real-time
ขั้นตอนหลัก
- จับภาพจากกล้อง → แปลง BGR → HSV
- ใช้ Trackbar 6 ตัว ควบคุม: H Low/High, S Low/High, V Low/High
inRange()สร้าง Mask ตามช่วง HSV- Morphological Operations (Erode/Dilate) กรอง Noise
- แสดง 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" แสดงภาพต้นฉบับ
