mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.9 KiB
104 lines
2.9 KiB
#include "opencv2/imgproc.hpp" |
|
#include "opencv2/highgui.hpp" |
|
#include <iostream> |
|
|
|
using namespace cv; |
|
|
|
/** Global Variables */ |
|
const int max_value_H = 360/2; |
|
const int max_value = 255; |
|
const String window_capture_name = "Video Capture"; |
|
const String window_detection_name = "Object Detection"; |
|
int low_H = 0, low_S = 0, low_V = 0; |
|
int high_H = max_value_H, high_S = max_value, high_V = max_value; |
|
|
|
//! [low] |
|
static void on_low_H_thresh_trackbar(int, void *) |
|
{ |
|
low_H = min(high_H-1, low_H); |
|
setTrackbarPos("Low H", window_detection_name, low_H); |
|
} |
|
//! [low] |
|
|
|
//! [high] |
|
static void on_high_H_thresh_trackbar(int, void *) |
|
{ |
|
high_H = max(high_H, low_H+1); |
|
setTrackbarPos("High H", window_detection_name, high_H); |
|
} |
|
|
|
//! [high] |
|
static void on_low_S_thresh_trackbar(int, void *) |
|
{ |
|
low_S = min(high_S-1, low_S); |
|
setTrackbarPos("Low S", window_detection_name, low_S); |
|
} |
|
|
|
static void on_high_S_thresh_trackbar(int, void *) |
|
{ |
|
high_S = max(high_S, low_S+1); |
|
setTrackbarPos("High S", window_detection_name, high_S); |
|
} |
|
|
|
static void on_low_V_thresh_trackbar(int, void *) |
|
{ |
|
low_V = min(high_V-1, low_V); |
|
setTrackbarPos("Low V", window_detection_name, low_V); |
|
} |
|
|
|
static void on_high_V_thresh_trackbar(int, void *) |
|
{ |
|
high_V = max(high_V, low_V+1); |
|
setTrackbarPos("High V", window_detection_name, high_V); |
|
} |
|
|
|
int main(int argc, char* argv[]) |
|
{ |
|
//! [cap] |
|
VideoCapture cap(argc > 1 ? atoi(argv[1]) : 0); |
|
//! [cap] |
|
|
|
//! [window] |
|
namedWindow(window_capture_name); |
|
namedWindow(window_detection_name); |
|
//! [window] |
|
|
|
//! [trackbar] |
|
// Trackbars to set thresholds for HSV values |
|
createTrackbar("Low H", window_detection_name, &low_H, max_value_H, on_low_H_thresh_trackbar); |
|
createTrackbar("High H", window_detection_name, &high_H, max_value_H, on_high_H_thresh_trackbar); |
|
createTrackbar("Low S", window_detection_name, &low_S, max_value, on_low_S_thresh_trackbar); |
|
createTrackbar("High S", window_detection_name, &high_S, max_value, on_high_S_thresh_trackbar); |
|
createTrackbar("Low V", window_detection_name, &low_V, max_value, on_low_V_thresh_trackbar); |
|
createTrackbar("High V", window_detection_name, &high_V, max_value, on_high_V_thresh_trackbar); |
|
//! [trackbar] |
|
|
|
Mat frame, frame_HSV, frame_threshold; |
|
while (true) { |
|
//! [while] |
|
cap >> frame; |
|
if(frame.empty()) |
|
{ |
|
break; |
|
} |
|
|
|
// Convert from BGR to HSV colorspace |
|
cvtColor(frame, frame_HSV, COLOR_BGR2HSV); |
|
// Detect the object based on HSV Range Values |
|
inRange(frame_HSV, Scalar(low_H, low_S, low_V), Scalar(high_H, high_S, high_V), frame_threshold); |
|
//! [while] |
|
|
|
//! [show] |
|
// Show the frames |
|
imshow(window_capture_name, frame); |
|
imshow(window_detection_name, frame_threshold); |
|
//! [show] |
|
|
|
char key = (char) waitKey(30); |
|
if (key == 'q' || key == 27) |
|
{ |
|
break; |
|
} |
|
} |
|
return 0; |
|
}
|
|
|