使用opencv c ++进行静态图像车辆识别

时间:2017-03-10 09:24:04

标签: c++ opencv

我正在研究一个使用相机拍照以检测停车场内可用停车位的项目。

我将使用图像减法来比较停车场的空旷和被占用情况。

这是用于比较的两张图片

这是结果图像:

任何人都可以告诉我如何

  1. 识别并在车外放置一个矩形

  2. 为我的进一步使用输出汽车的数量?

  3. 以下是代码:

        // 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);
    
    }
    

1 个答案:

答案 0 :(得分:1)

你的问题在一篇文章中解决起来非常复杂,但我会就如何解决它给你一些指示。

这个想法是正确的,你应该比较图像之间的差异。我不建议逐个像素地直接比较,但它是原型的快速解决方案。对于更强大的方法,请结帐background subtraction c++more extense but in python

至于计算车辆数量,考虑到场景的复杂性(重叠车辆,非均匀停车),我建议手动指定每辆车的感兴趣区域(ROI)。应用您已经拥有的每个ROI的方法,您可以检测该停车位是否被占用。

关于如何在opencv中draw a rectangle

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