Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Cách phát hiện màu sắc trong OpenCV C++


Giới thiệu

Phát hiện màu dựa trên không gian màu HSV (Hue, Saturation, Value) vì tách biệt tốt hơn màu sắc so với BGR. Dùng trackbar để điều chỉnh ngưỡng HSV real-time.

Chương trình phát hiện màu sắ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;
    int Sat_Lower = 0, Sat_Upper = 255;
    int 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 opening & closing
        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("Threesholded Image", detection_screen);
        imshow("Original", actual_Image);
        if (waitKey(30) == 27) break;
    }
    return 0;
}

Kết quả

Cửa sổ "Adjust" có 6 trackbar HSV. "Threesholded Image" hiển thị mask trắng/đen của màu được phát hiện. "Original" hiển thị video gốc.