我正在使用相机拍摄照片以检测 parking 场中的可用 parking 位的项目。

我将使用图像减法来比较 parking 场的空置情况和占用情况。

这是两个图片供比较

c++ - 使用OpenCV C++进行静态图像车辆识别-LMLPHP

这是结果图像:

c++ - 使用OpenCV C++进行静态图像车辆识别-LMLPHP

谁能告诉我如何

  • 识别并在车辆外部放置一个矩形
  • 输出车号供我进一步使用?

  • 这是代码:
        // Test.cpp
    
    #include<opencv2/core/core.hpp>
    #include<opencv2/highgui/highgui.hpp>
    #include<opencv2/imgproc/imgproc.hpp>
    
    #include<iostream>
    
    using namespace std;
    using namespace cv;
    
    Mat bg_frame;
    Mat cam_frame;
    Mat diff_frame;
    char charCheckForEscKey = 0;
    
    int main() {
    
        while (charCheckForEscKey != 27 /*&& capWebcam.isOpened()*/) {
    
        bg_frame = imread("Picture1.jpg",0);
        cam_frame = imread("Picture4.jpg",0);
    
        resize(cam_frame, cam_frame, bg_frame.size());
    
        imshow("test1", bg_frame);
        imshow("test2", cam_frame);
    
        absdiff(bg_frame, cam_frame, diff_frame);
    
        threshold(diff_frame, diff_frame, 80, 255, THRESH_BINARY);
    
    
        //erode(diff_frame, diff_frame, getStructuringElement(MORPH_RECT, Size(1, 1)));
    
        dilate(diff_frame, diff_frame, Mat(), Point(-1, -1));
    
        //Canny(diff_frame, diff_frame, 30, 70);
    
        imshow("test3", diff_frame);
    
        charCheckForEscKey = cv::waitKey(1);            // delay (in ms) and get key press, if any
        }
    
        return(0);
    
    }
    

    最佳答案

    您的问题非常复杂,需要在单个帖子中解决,但我将为您提供一些解决方法的指导。

    这个想法是正确的,您应该比较图像之间的差异。我不建议直接逐像素比较,但是它是原型(prototype)的快速解决方案。有关更健壮的方法,请检查background subtraction c++more extense but in python

    至于计算车辆数量,考虑到场景的复杂性(重叠的汽车,不均匀的 parking 位),我建议手动为每辆汽车指定一个关注区域(ROI)。应用已经为每个ROI确定的方法,您可以检测到该 parking 位是否被占用。

    关于如何在opencv中draw a rectangle

    void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0);
    

    09-06 13:44