荆为好 2024-06-25 13:54 采纳率: 100%
浏览 6
已结题

OpenCV检测车辆的代码实现

使用OpenCV进行车辆检测,检测移动的车辆数据,代码如何实现,请指教

  • 写回答

3条回答 默认 最新

  • 岫珩 全栈领域优质创作者 2024-06-25 13:55
    关注
    
    void processVideo(char* videoFilename)  
    {  
        Mat frame; // current frame  
        Mat fgMaskMOG2; // fg mask fg mask generated by MOG2 method  
        Mat bgImg; // background  
        Ptr<BackgroundSubtractorMOG2> pMOG2 = createBackgroundSubtractorMOG2(200, 36.0, false); // MOG2 Background subtractor  
      
        while (true)  
        {  
            VideoCapture capture(videoFilename);  
            if (!capture.isOpened())  
            {  
                cerr << "Unable to open video file: " << videoFilename << endl;  
                return;  
            }  
      
            int width = (int)capture.get(CV_CAP_PROP_FRAME_WIDTH);  
            int height = (int)capture.get(CV_CAP_PROP_FRAME_HEIGHT);  
      
            unique_ptr<IplImage, void(*)(IplImage*)> labelImg(cvCreateImage(cvSize(width, height), IPL_DEPTH_LABEL, 1),   
                [](IplImage* p){ cvReleaseImage(&p); });  
            CvBlobs blobs;  
            CvTracks tracks;  
      
            while (true)  
            {  
                // read input data. ESC or 'q' for quitting  
                int key = waitKey(1);  
                if (key == 'q' || key == 27)  
                    return;  
                if (!capture.read(frame))  
                    break;  
      
                // update background  
                pMOG2->apply(frame, fgMaskMOG2);  
                pMOG2->getBackgroundImage(bgImg);  
                imshow("BG", bgImg);  
                imshow("Original mask", fgMaskMOG2);  
      
                // post process  
                medianBlur(fgMaskMOG2, fgMaskMOG2, 5);  
                imshow("medianBlur", fgMaskMOG2);  
                morphologyEx(fgMaskMOG2, fgMaskMOG2, MORPH_CLOSE, getStructuringElement(MORPH_RECT, Size(5, 5))); // fill black holes  
                morphologyEx(fgMaskMOG2, fgMaskMOG2, MORPH_OPEN, getStructuringElement(MORPH_RECT, Size(5, 5))); // fill white holes  
                imshow("morphologyEx", fgMaskMOG2);  
      
                // track  
                cvLabel(&IplImage(fgMaskMOG2), labelImg.get(), blobs);  
                cvFilterByArea(blobs, 64, 10000);  
                cvUpdateTracks(blobs, tracks, 10, 90, 30);  
                cvRenderTracks(tracks, &IplImage(frame), &IplImage(frame));  
      
                // show  
                imshow("Frame", frame);  
      
                key = waitKey(30);  
            }  
        }  
    }  
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月3日
  • 已采纳回答 6月25日
  • 创建了问题 6月25日