// 简单实现 cv::namedWindow("Example 2-3", cv::WINDOW_AUTOSIZE); cv::VideoCapture cap; cap.open(0); cout << "Opened file: " << argv[1] << endl; cv::Mat frame, frame_threshold; int low_r = 30, low_g = 30, low_b = 30; int high_r = 100, high_g = 100, high_b = 100; for (;;) { cap >> frame; if (frame.empty()) break; // Ran out of film inRange(frame, cv::Scalar(low_b, low_g, low_r), cv::Scalar(high_b, high_g, high_r), frame_threshold); //-- Show the frames imshow("Video Capture", frame); imshow("Object Detection", frame_threshold); if ((char)cv::waitKey(33) >= 0) break; } return 0;
// 完整实现 #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include <iostream> #include <stdlib.h> using namespace std; using namespace cv; void on_low_r_thresh_trackbar(int, void*); void on_high_r_thresh_trackbar(int, void*); void on_low_g_thresh_trackbar(int, void*); void on_high_g_thresh_trackbar(int, void*); void on_low_b_thresh_trackbar(int, void*); void on_high_b_thresh_trackbar(int, void*); int low_r = 30, low_g = 30, low_b = 30; int high_r = 100, high_g = 100, high_b = 100; int main() { Mat frame, frame_threshold; VideoCapture cap(0); namedWindow("Video Capture", WINDOW_NORMAL); namedWindow("Object Detection", WINDOW_NORMAL); //-- Trackbars to set thresholds for RGB values createTrackbar("Low R", "Object Detection", &low_r, 255, on_low_r_thresh_trackbar); createTrackbar("High R", "Object Detection", &high_r, 255, on_high_r_thresh_trackbar); createTrackbar("Low G", "Object Detection", &low_g, 255, on_low_g_thresh_trackbar); createTrackbar("High G", "Object Detection", &high_g, 255, on_high_g_thresh_trackbar); createTrackbar("Low B", "Object Detection", &low_b, 255, on_low_b_thresh_trackbar); createTrackbar("High B", "Object Detection", &high_b, 255, on_high_b_thresh_trackbar); while ((char)waitKey(1) != 'q') { cap >> frame; if (frame.empty()) break; //-- Detect the object based on RGB Range Values inRange(frame, Scalar(low_b, low_g, low_r), Scalar(high_b, high_g, high_r), frame_threshold); //-- Show the frames imshow("Video Capture", frame); imshow("Object Detection", frame_threshold); } return 0; } void on_low_r_thresh_trackbar(int, void*) { low_r = min(high_r - 1, low_r); setTrackbarPos("Low R", "Object Detection", low_r); } void on_high_r_thresh_trackbar(int, void*) { high_r = max(high_r, low_r + 1); setTrackbarPos("High R", "Object Detection", high_r); } void on_low_g_thresh_trackbar(int, void*) { low_g = min(high_g - 1, low_g); setTrackbarPos("Low G", "Object Detection", low_g); } void on_high_g_thresh_trackbar(int, void*) { high_g = max(high_g, low_g + 1); setTrackbarPos("High G", "Object Detection", high_g); } void on_low_b_thresh_trackbar(int, void*) { low_b = min(high_b - 1, low_b); setTrackbarPos("Low B", "Object Detection", low_b); } void on_high_b_thresh_trackbar(int, void*) { high_b = max(high_b, low_b + 1); setTrackbarPos("High B", "Object Detection", high_b); }
参考:https://www.w3cschool.cn/opencv/opencv-k1vh2cod.html