Ниже приведен вывод и код для отснятого материала камеры наблюдения (который включает вычитание фона).Могу ли я узнать, как добавить функцию группирования прямоугольников и нарисовать прямоугольники (для отслеживания каждого транспортного средства в каждом отдельном кадре)?Спасибо!:)
Выход> [Выход] [1] [1]: https://i.stack.imgur.com/M1TLu.png `
using namespace cv;
using namespace std;
const char* params
= "{ input | background.mp4 | Path to a video or a sequence of image }"
"{ algo | MOG2 | Background subtraction method ( MOG2) }";
int main(int argc, char* argv[])
{
CommandLineParser parser(argc, argv, params);
//create Background Subtractor objects
Ptr<BackgroundSubtractor> pBackSub;
if (parser.get<String>("algo") == "MOG2")
pBackSub = createBackgroundSubtractorMOG2();
VideoCapture capture(parser.get<String>("input")); //input video
Mat frame, fgMask;
while (true) {
capture >> frame;
if (frame.empty()) //break if frame empty
break;
//update the background model
pBackSub->apply(frame, fgMask);
//erode the frame with 3x3 kernel
Mat frame_eroded_with_3x3_kernel;
erode(fgMask, frame_eroded_with_3x3_kernel, getStructuringElement(MORPH_RECT, Size(3,3)));
//dilate the frame with 2x2 kernel
Mat frame_dilate_with_2x2_kernel;
dilate(frame_eroded_with_3x3_kernel, frame_dilate_with_2x2_kernel, getStructuringElement(MORPH_RECT, Size(2,2)));
//show the current frame and the fg mask
imshow("Frame", frame);
imshow("FG Mask", fgMask);
imshow("After eroded with 3x3 kernel", frame_eroded_with_3x3_kernel);
imshow("After dilate with 2x2 kernel", frame_dilate_with_2x2_kernel);
//get the input from the keyboard
int keyboard = waitKey(30);
if (keyboard == 'q' || keyboard == 27)
break;
}
return 0;
}