c语言opencv删除图片 在进行图像处理的时候,经常要进行图像的剔除。下面我们学习一下opencv删除图像的函数。intresultremove(imgpath〔i〕。cstr());绝对或者相对路径都可以intresultremove(1。jpg);绝对或者相对路径都可以if(result0)coutdeletesucceeded!删除图片成功elsecoutdeletefailed!删除图片失败具体应用示例 为了方便大家理解如何使用,下面我举一个例子,在相机标定的时候进行图像不符合规范的自动删除includeopencv2corecore。hppincludeopencv2imgprocimgproc。hppincludeopencv2calib3dcalib3d。hppincludeopencv2highguihighgui。hppincludeiostreamincludefstreamincludeiostreamincludestdlib。hsrand()和rand()函数includewindows。definedebugshowpicture1是否显示部分调试图片,方便调试definedebugsaveshipin0是否保存结果视频打印相关组件start!打印等级,修改后面的宏定义可以改变函数输出打印等级defineALGPRTINTLEVERPRINTLEVELUNLIMITdefineALGPRTINT(。。。)SALprintf(VAARGS)defineALGPRT(。。。)ALGPRTINT(FUNCTION,LINE,PRINTLEVELUNLIMIT,VAARGS)defineALGDBG(。。。)ALGPRTINT(FUNCTION,LINE,PRINTLEVELDBG,VAARGS)defineALGWAR(。。。)ALGPRTINT(FUNCTION,LINE,PRINTLEVELWRN,VAARGS)defineALGERR(。。。)ALGPRTINT(FUNCTION,LINE,PRINTLEVELERR,VAARGS)enumHATSALPRTLEVELEbrief打印输出的等级typedefenumPRTLEVELE{PRINTLEVELERR0,错误打印信息PRINTLEVELWRN1,警告打印信息PRINTLEVELDBG2,调试打印信息PRINTLEVELUNLIMIT3,无限制打印信息PRINTLEVELNOPRT4,没有打印信息}PRTLEVELE;Function:SALprintfDescription:该函数能够通过设置的打印等级ALGPRTINTLEVER,来控制是否输出相关语句Input:Output:Return:0:Successfulohters:FailedvoidSALprintf(constcharpFun,UINTline,PRTLEVELElevelParam,constcharfmt,。。。){staticINT8gprintfInfo〔4〕〔16〕{ERR,WAR,DBG,INF};if(ALGPRTINTLEVERPRINTLEVELNOPRTlevelParamPRINTLEVELNOPRT){}if(levelParamALGPRTINTLEVER){vastart(p,fmt);printf(〔ALG〕〔s〕〔s〕〔4d〕,gprintfInfo〔levelParam〕,pFun,line);vprintf(fmt,p);vaend(p);}}打印相关组件endclassVe{public:vectorstringReadImage(cv::Stringpattern);};vectorstringVe::ReadImage(cv::Stringpattern){vectorcv::Sglob(pattern,fn,false);sizetcountfn。size();numberofpngfilesinimagesfolderfor(sizeti0;i){temp。pushback(fn〔i〕);}}voidmain(){ofstreamfout(caliberationresult。txt);保存标定结果的文件读取每一幅图像,从中提取出角点,然后对角点进行亚像素精确化cout开始提取角点;intimagecount0;图像数量S图像的尺寸SizeboardsizeSize(8,11);标定板上每行、列的角点数vectorPoint2缓存每幅图像上检测到的角点vectorvectorPoint2保存检测到的所有角点intcount1;用于存储角点个数。while(getline(fin,filename)){cv::Stringpattern。data02232che2chehuochevideo4。Vvectorstringimgpathve。ReadImage(pattern);for(inti0;iimgpath。size();i){用于观察检验输出输出检验MatimageInputimread(imgpath〔i〕);if(imageInput。empty()){ALGERR(cannotopenpic,图片s打开失败,imgpath〔i〕。cstr());coutcannotopenpic!;Sleep(100000);睡眠一下,不至于窗口跳出exit(1);}MatimageInputcopyimageInput。clone();校正后输出图片if(imagecount1)读入第一张图片时获取图像宽高信息{imagesize。widthimageInput。imagesize。heightimageInput。coutimagesize。widthimagesize。coutimagesize。heightimagesize。}printf(输出结果:s,filename。cstr());提取角点if(0findChessboardCorners(imageInput,boardsize,imagepointsbuf)){coutcannotfindchessboardcorners!;找不到角点ALGERR(图片:s找不到角点,请检查或者更换该图片,imgpath〔i〕。cstr());intresultremove(imgpath〔i〕。cstr());绝对或者相对路径都可以if(result0)coutdeletesucceeded!删除图片成功elsecoutdeletefailed!删除图片失败}else{ALGPRT(正在提取图片s的角点,imagecountd,imgpath〔i〕。cstr(),imagecount);McvtColor(imageInput,viewgray,COLORRGB2GRAY);亚像素精确化find4QuadCornerSubpix(viewgray,imagepointsbuf,Size(5,5));对粗提取的角点进行精确化cornerSubPix(viewgray,imagepointsbuf,Size(5,5),Size(1,1),TermCriteria(CVTERMCRITEPSCVTERMCRITITER,30,0。1));imagepointsseq。pushback(imagepointsbuf);保存亚像素角点在图像上显示角点位置drawChessboardCorners(viewgray,boardsize,imagepointsbuf,false);用于在图片中标记角点namedWindow(CameraCalibration,0);创建窗口imshow(CameraCalibration,viewgray);显示图片waitKey(5);暂停0。5S这种初始化点的方式也可以for(inti0;iimagepointsbuf。size();i){Pointp2;p2。ximagepointsbuf〔i〕。x;p2。yimagepointsbuf〔i〕。y;画实心点circle(imageInputcopy,p2,8,Scalar(0,0,255),1);第五个参数我设为1,表明这是个实点。}namedWindow(imageInputcopy,0);创建窗口imshow(imageInputcopy,imageInputcopy);显示图片waitKey(5);暂停0。5S}}ALGPRT(所有图片检查完毕);waitKey(5000000000000);暂停0。5S}