2017-03-10 30 views
1

我正在使用相機拍攝照片以檢測停車場中可用停車位的項目。使用opencv C++進行靜態圖像車輛識別

我打算使用圖像減法來比較停車場內的空閒和佔用情況。

這是兩個圖像進行比較

這是得到的圖像:

誰能告訴我如何

  1. 識別和放汽車外部的一個矩形

  2. 輸出汽車的號碼以供我進一步使用?

下面是代碼:

// 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

你的問題是非常複雜的一個職位需要解決,但我會給你如何解決它的一些指針。

這個想法是正確的,你應該比較圖像之間的差異。我不建議直接逐個比較像素,但它是原型的快速解決方案。對於給定的場景的複雜程度更穩健的方法結帳background subtraction c++more extense but in python

至於計數車輛的數量,每輛車(重疊汽車,非均勻停車場),那麼我會建議手動指定利息(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); 
+0

非常感謝,您能談談關於投資回報率的更多信息嗎? –

+0

它簡單地是圖像的矩形部分,一系列定義區域的像素。在你的情況下,它是一個地區每個停車位。通過這種方式,您可以將全球問題分解爲一個簡單的例子:「這個圖像是汽車還是空的公園空間?」 – Hennio