资源简介

基于Linux下opencv,用于车牌识别,环境为arm-linux,非VS环境,文章链接:https://blog.csdn.net/Guet_Kite/article/details/79702169

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include  
#include  
#include 
#include 

using namespace cv; 
using namespace std;

//车牌宽高比为520/110=4.727272左右,误差不超过40%
//车牌高度范围在15~125之间,视摄像头距离而定(图像大小)
bool verifySizes_closeImg(const RotatedRect & candidate)
{
    float error = 0.4;//误差40%
    const float aspect = 4.7272;//44/14; //长宽比
    int min = 15*aspect*15;//20*aspect*20; //面积下限,最小区域
    int max = 125*aspect*125;//180*aspect*180;  //面积上限,最大区域
    float rmin = aspect - aspect*error; //考虑误差后的最小长宽比
    float rmax = aspect + aspect*error; //考虑误差后的最大长宽比

    int area = candidate.size.height * candidate.size.width;//计算面积
    float r = (float)candidate.size.width/(float)candidate.size.height;//计算宽高比
    if(r <1)
        r = 1/r;

    if( (area < min || area > max) || (r< rmin || r > rmax)  )//满足条件才认为是车牌候选区域
        return false;
    else
        return true;
}

void RgbConvToGray(const Mat& inputImageMat & outpuImage)  //g = 0.3R+0.59G+0.11B
{
    outpuImage = Mat(inputImage.rows inputImage.cols CV_8UC1);  

    for (int i = 0 ;i    {
        uchar *ptrGray = outpuImage.ptr(i); 
        const Vec3b * ptrRgb = inputImage.ptr(i);
        for (int j = 0 ;j        {
            ptrGray[j] = 0.3*ptrRgb[j][2]+0.59*ptrRgb[j][1]+0.11*ptrRgb[j][0];  
        }
    }
}

void normal_area(Mat &intputImg vector &rects_optimal vector & output_area )
{
    float rangle;
    for (int i = 0 ;i< rects_optimal.size() ; ++i)
    {
        //旋转区域
        angle = rects_optimal[i].angle;
        r = (float)rects_optimal[i].size.width / (float) (float)rects_optimal[i].size.height;
        if(r<1)
            angle = 90 + angle;//旋转图像使其得到长大于高度图像。
        Mat rotmat = getRotationMatrix2D(rects_optimal[i].center  angle1);//获得变形矩阵对象
        Mat img_rotated;
        warpAffine(intputImg img_rotatedrotmat intputImg.size()CV_INTER_CUBIC);
        imwrite(“car_rotated.jpg“img_rotated);//得到旋转图像

        //裁剪图像
        Size rect_size = rects_optimal[i].size;
        if(r<1)
            swap(rect_size.width rect_size.height); //交换高和宽
        Mat  img_crop;
        getRectSubPix(img_rotated rect_sizerects_optimal[i].center  img_crop );//图像切割

        //用光照直方图调整所有裁剪得到的图像,使具有相同宽度和高度,适用于训练和分类
        Mat resultResized;
        //别人写的:
        /*resultResized.create(33144CV32FC1);
        resize(img_crop  resultResizedresultResized.size()  00INTER_CUBIC);
        resultResized.convertTo(resultResized CV32FC1);
        resultResized = resultResized.reshape(11);*/

        resultResized.create(33144CV_8UC3);//CV32FC1????
        resize(img_crop  resultResizedresultResized.size()  00INTER_CUBIC);
        Mat grayResult;
        RgbConvToGra

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     795336  2018-03-21 13:28  car_number\ann_xml.xml

     文件      61946  2018-03-21 13:28  car_number\ann_xml_character.xml

     文件      31900  2018-03-14 12:51  car_number\car.jpg

     文件      20409  2019-01-21 00:08  car_number\main.cpp

     文件    4139007  2017-03-21 16:01  car_number\SVM.xml

     目录          0  2019-01-21 00:08  car_number

----------- ---------  ---------- -----  ----

              5048598                    6


评论

共有 条评论