实例介绍
【实例截图】
【核心代码】
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;
}
标签: 检测
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论