# Recognition of car plate

Recognition of the car and finding its plate is popular theme for school projects and there are also many commercial systems. This project shows how you can recognize cars and its plate from video record or live stream. After a little modification it can by used to improve some parking systems. Idea of this algorithm is absolute different between frames and lot of testing.

Functions used: medianBlur, cvtColor, adaptiveThreshold, dilate, findContours

## The process

1. Customizing the size of video footage
2. Convert image to gray scale and blur it
```medianBlur(mainPicture,temp1,15);
cvtColor(temp1,temp1, CV_BGR2GRAY);
```
3. Start making absolute different between every 4 frames
4. Threshold picture with number of thresh is 20 and number of maxval is 255
```adaptiveThreshold(temp1, temp1, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY_INV, 35, 5);
```
5. Make 25 iterations of dilation
```dilate(output,output,Mat(),Point(-1,-1), 25,0);
```
6. Find contures from actual picture and take the area of the biggest conture
```findContours( picture.clone(), contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
```
7. Now you have color picture of whole car and the next step is to find a car light. Plate is somewhere between car lights.
8. Another conversion to gray scale, erosion, dilation and blur
9. Now threshold picture with thresh number 220 and maxval number 255
10. Split picture to right part and left part
11. Find biggest conture for both sides of the picture
12. Make rectangle with both contures in it and slightly wides

## Sample

Step 2 – Grey scale and blurring

Step 5 – Dilation

Step 6 – Finding the biggest conture

Step 8 – Thresholding

## Result

Recognition of the car plate

```// oznacenie praveho a laveho svetla
polylines(tempCar, areaR, true,Scalar(0,255,0), 3, CV_AA);
polylines(tempCar, areaL, true,Scalar(255,0,0), 3, CV_AA);

//najdenie miesta kde by sa mala nachadzat SPZ
if(!areaL.empty() && !areaR.empty() ){
//if( contourArea(Mat(areaL)) - contourArea(Mat(areaR)) < 100  ) {
for(int i = 0; i < areaL.size(); i++){
areaR.push_back(areaL[i]);
}
Rect rectR = boundingRect(areaR);
if(rectR.width < 285 && rectR.width > 155 && rectR.height > 4 && rectR.height < 85){
rectR.height = rectR.height + 30;
rectangle(tempCar, rectR, CV_RGB(255,0,0));
}
}
```