Функция Group Rectangles для обнаружения транспортных средств OpenCV C ++ - PullRequest
0 голосов
/ 04 марта 2019

Ниже приведен вывод и код для отснятого материала камеры наблюдения (который включает вычитание фона).Могу ли я узнать, как добавить функцию группирования прямоугольников и нарисовать прямоугольники (для отслеживания каждого транспортного средства в каждом отдельном кадре)?Спасибо!:)

Выход> [Выход] [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;

}
...