在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Qt 图形界面开发 → 基于颜色车牌检测(opencv)

基于颜色车牌检测(opencv)

Qt 图形界面开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:4.53KB
  • 下载次数:156
  • 浏览次数:1505
  • 发布时间:2016-08-29
  • 实例类别:Qt 图形界面开发
  • 发 布 人:csaakk
  • 文件格式:.rar
  • 所需积分:0
 相关标签: 检测

实例介绍

【实例简介】
【实例截图】

【核心代码】

int main()
{
    IplImage *imgSrc=cvLoadImage("C:\\carimage\\car.jpg");
    IplImage *imgH,*imgS,*imgV,*imgHSV,*imgGray;
    imgHSV=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,3);
    imgH=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
    imgS=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
    imgV=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
    cvCvtColor(imgSrc,imgHSV,CV_BGR2HSV);
    cvSplit(imgHSV,imgH,imgS,imgV,0);
    cvInRangeS(imgH,cvScalar(94,0,0,0),cvScalar(115,0,0,0),imgH);
    cvInRangeS(imgS,cvScalar(90,0,0,0),cvScalar(255,0,0,0),imgS);
    cvInRangeS(imgV,cvScalar(36,0,0,0),cvScalar(255,0,0,0),imgV);
    IplImage *imgTemp,*imgHsvBinnary;
    imgTemp=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
    imgHsvBinnary=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
    cvAnd(imgH,imgS,imgTemp);
    cvAnd(imgTemp,imgV,imgHsvBinnary);
    //形态学去噪
    //定义结构元素
    IplConvKernel *element=0;
    int values[2]={255,255};
    int rows=2,cols=1,anchor_x=0,anchor_y=1;
    element = cvCreateStructuringElementEx(cols,rows,anchor_x,anchor_y,CV_SHAPE_CUSTOM,values);
    //膨胀腐蚀
    cvDilate(imgHsvBinnary,imgHsvBinnary,element,1);
    cvErode(imgHsvBinnary,imgHsvBinnary,element,1);
    cvNamedWindow("imgh1");
    cvShowImage("imgh1",imgHsvBinnary);
    imgGray=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
    cvCvtColor(imgSrc,imgGray,CV_RGB2GRAY);
    IplImage *imgRgbBinnary;
    imgRgbBinnary=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,1);
    int Thresold=myOtsu(imgGray);//求阈值
    cvThreshold(imgGray,imgRgbBinnary,Thresold,255,CV_THRESH_OTSU);
    cvNamedWindow("imgh2");
    cvShowImage("imgh2",imgRgbBinnary);

    //车牌定位
    //行定位
    int hop_num=10;//字符连续跳变次数的阈值
    int num=0;//计算跳变的次数
    int begin=0;//跳变是否开始
    int mark_Row[2]={0},k=0;//标记车牌的开始行与结束行
    for(int i=imgSrc->height-1;i>=0;i--)
    {
        num=0;
        for(int j=0;j<imgSrc->width-1;j )
        {
            if(cvGet2D(imgHsvBinnary,i,j).val[0]!=cvGet2D(imgHsvBinnary,i,j 1).val[0])
               {
                    num ;
               }
        }
        if(num>hop_num)
            {
                mark_Row[k]=i;
                k ;
                if(k>1)
                    k=1;
             }
    }
    std::cout <<"mark=  " <<  mark_Row[0] << "    " << mark_Row[1];
    cvLine(imgSrc,cvPoint(0,mark_Row[0]),cvPoint(imgSrc->width,mark_Row[0]),CV_RGB(255,255,0));
    cvLine(imgSrc,cvPoint(0,mark_Row[1]),cvPoint(imgSrc->width,mark_Row[1]),CV_RGB(255,255,0));
    //列定位
    int mark_col[2]={0},num_col=0,k_col=0;
    int a[100]={0},Thresold_col=10;
    for(int j=0;j<imgSrc->width;j )
    {
        num_col=0;
        for(int i=mark_Row[1];i<mark_Row[0];i )
            if(cvGet2D(imgHsvBinnary,i,j).val[0]>0)
                num_col ;
                if(num_col>Thresold_col)
                {
                    mark_col[k_col]=j;
                    k_col ;
                    if(k_col>1)
                        k_col=1;
                }
    }
    int i=0;
    cvLine(imgSrc,cvPoint(mark_col[0],0),cvPoint(mark_col[0],imgSrc->height),CV_RGB(255,0,0));
    cvLine(imgSrc,cvPoint(mark_col[1],0),cvPoint(mark_col[1],imgSrc->height),CV_RGB(255,0,0));
    IplImage *imgLicense;
    int license_Width=(mark_col[1]-mark_col[0])/4*4;
    int license_Height =mark_Row[0]-mark_Row[1];

    cvSetImageROI(imgSrc,cvRect(mark_col[0],mark_Row[1],license_Width,license_Height));
    imgLicense=cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,imgSrc->nChannels);
    cvCopy(imgSrc,imgLicense,0);
    cvResetImageROI(imgSrc);
    cvNamedWindow("license");
    cvShowImage("license",imgLicense);
    cvNamedWindow("src");
    cvShowImage("src",imgSrc);
    cvWaitKey(0);
    return 0;
}



标签: 检测

实例下载地址

基于颜色车牌检测(opencv)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警