123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- #include "opencv2/imgproc.hpp"
- #include "opencv2/highgui.hpp"
- #include "opencv2/videoio.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;
- }
|