OpenCV C++车型识别1-图像预处理

发布时间:2026/7/30 1:50:45
OpenCV C++车型识别1-图像预处理 这个程序使用OpenCV C实现简单的车型识别这一小节进行图像预处理。输入图片是没有小汽车的背景图片和有小汽车的前景图片上面两张图片做差提取出只有小汽车的前景图片并二值化处理然后开运算(先腐蚀后膨胀)去除图像里的噪点和小物体现在只剩下几个小噪点了去掉这几个小噪点并把整个车辆填充为一个整体得到最终的结果第二小节是形状识别《OpenCV C车型识别2-形状匹配-CSDN博客》代码void Imgsub() { BkGraycvCreateImage(cvGetSize(BkImg),8,1); cvCvtColor(BkImg,BkGray,CV_BGR2GRAY); FrGraycvCreateImage(cvGetSize(BkImg),8,1); cvCvtColor(FrImg,FrGray,CV_BGR2GRAY); cvSmooth(BkGray,BkGray,CV_GAUSSIAN,5); cvSmooth(FrGray,FrGray,CV_GAUSSIAN,5); SubImgcvCreateImage(cvGetSize(BkImg),8,1); cvAbsDiff(FrGray,BkGray,SubImg); } void Binary() { BinaryImgcvCreateImage(cvGetSize(BkImg),8,1); cvThreshold(SubImg,BinaryImg,0,255,CV_THRESH_OTSU); } void Open() { IplConvKernel * kernel_5_5; kernel_5_5cvCreateStructuringElementEx(5,5,2,2,CV_SHAPE_ELLIPSE,0); IplConvKernel * kernel_7_7; kernel_7_7cvCreateStructuringElementEx(7,7,3,3,CV_SHAPE_ELLIPSE,0); cvErode(BinaryImg,BinaryImg,kernel_5_5,1); cvDilate(BinaryImg,BinaryImg,kernel_7_7,1); } void Removenoise() { IplImage * BinaryImg2; BinaryImg2cvCloneImage(BinaryImg); CvMemStorage * storagecvCreateMemStorage(0); CvSeq * area_contourNULL; int Number_contours0; double Area0; CvScalar s_fill_new; s_fill_new.val[0]0; CvScalar loDiff; loDiff.val[0]10; CvScalar upDiff; upDiff.val[0]10; Number_contourscvFindContours(BinaryImg,storage,area_contour,sizeof(CvContour),CV_RETR_EXTERNAL); for(CvSeq * carea_contour;c!NULL;cc-h_next) { Areafabs(cvContourPerimeter(c)); if(Area30) { for(int i0;i1;i) { CvPoint * seedpointCV_GET_SEQ_ELEM(CvPoint,c,i); cvFloodFill(BinaryImg2,*seedpoint,s_fill_new,loDiff,upDiff,NULL,4,0); } } } BinaryImgcvCloneImage(BinaryImg2); } void Imgfill() { CvScalar s; CvScalar s_new; s_new.val[0]255; int left_X0; int right_X0; int top_Y0; int bottom_Y0; for(int wt0;wtBinaryImg-width;wt) { for(int ht0;htBinaryImg-height;ht) { scvGet2D(BinaryImg,ht,wt); if(255s.val[0]) { top_Yht; for(int mBinaryImg-height-1;m0;m--) { scvGet2D(BinaryImg,m,wt); if(255s.val[0]) { bottom_Ym; break; } } for(int itop_Y;ibottom_Y;i) cvSet2D(BinaryImg,i,wt,s_new); htBinaryImg-height; } } } for(int ht0;htBinaryImg-height;ht) { for(int wt0;wtBinaryImg-width;wt) { scvGet2D(BinaryImg,ht,wt); if(255s.val[0]) { for(int mBinaryImg-width-1;m0;m--) { scvGet2D(BinaryImg,ht,m); if(255s.val[0]) { right_Xm; break; } } for(int ileft_X;iright_X;i) cvSet2D(BinaryImg,ht,i,s_new); wtBinaryImg-width; } } } }

相关新闻

最新新闻

日新闻

周新闻

月新闻