手把手教你如何利用Python+opencvopencv实时识别指定(或自定义)物体一.引入opencv人脸识别大家应该都听说过,本篇目的是利用opencv从视频帧中识别指定的物体,并框出来,且可以保存截取到的物体图片,会将整个流程都讲一下,包括训练自己的分类器,使用训练好的分类器进行识别。这里以识别舌头为例。二.环境:1.python3.6.32.opencv3.4.0三.训练自己的分类器1.注意点:训练集分为正样本,负样本,样本全部为灰度图片,正样本图片尺寸需要固定,一般40*40左右即可,大了电脑跑不动,负样本尺寸不固定,负样本数量要比正样本多才行,少了有问题。图片批量缩小工具下载:链接:https://pan.baidu.com/s/1pMAp19p密码:vpp1图片批量灰度处理:使用美图秀秀2.正样本制作,使用美图秀秀将舌头的图片全部裁剪出来(尺寸一致为:40*40的),保存到一个文件夹pos中,当然可以先用大尺寸正方形框进行裁剪,然后再用图片缩小工具进行制定尺寸缩小。最后再用美图秀秀批量灰度化。附上名字自动有序化Java代码:1.Stringpath="C:\\Users\\Administrator\\Desktop\\pos\\";2.Filef=newFile(path);3.File[]files=f.listFiles();4.for(Filefile:files){5.i++;6.file.renameTo(newFile(path+i+"."+file.getName().split("\\.")[1]));7.}处理后得到如下所示图片:3.负样本制作:如上操作类似,不过这里不要求尺寸一样,但是负样本图片中一定不要包含待识别的区域(如这里的:舌头)如下所示:4.生成样本资源记录文件:a.正样本资源记录文件新建pos文件夹,将正样本的灰度图拷贝进去使用JAVA代码生成正样本资源记录文件:1.Stringpath="E:\\tools\\python\\eclipse\\work\\pythonTest\\demo\\0202\\img\\train\\tongue\\pos\\";2.Filetxtfile=newFile(path+"pos.txt");3.FileOutputStreamfos=newFileOutputStream(txtfile);4.PrintWriterpw=newPrintWriter(fos,true);5.Strings="";6.File[]files=newFile(path).listFiles();7.for(Filefile:files){8.pw.println("pos/"+file.getName()+"1004040");9.}生成后删除最后一行的带有(pos.txt)的内容,让正样本资源记录文件内容如下类似所示:(1004040)分别指代:数量左上方的坐标位置(x,y)右下方的坐标位置(x,y)处理好后,将pos.txt移动到上一级文件夹b.负样本资源记录文件新建neg文件夹,将负样本的灰度图拷贝进去使用JAVA代码生成负样本资源记录文件:1.Stringpath="E:\\tools\\python\\eclipse\\work\\pythonTest\\demo\\0202\\img\\train\\tongue\\neg\\";2.Filetxtfile=newFile(path+"neg.txt");3.FileOutputStreamfos=newFileOutputStream(txtfile);4.PrintWriterpw=newPrintWriter(fos,true);5.Strings="";6.File[]files=newFile(path).listFiles();7.for(Filefile:files){8.pw.println("neg/"+file.getName());9.10.}生成后删除最后一行的带有(neg.txt)的内容,让负样本资源记录文件内容如下类似所示:处理好后,将negtxt移动到上一级文件夹得到如图所示文件夹结构:5.使用opencv提供的opencv_createsamples.exe程序生成样本vec文件,新建批处理文件:createsamples.bat内容如下:1.opencv_createsamples.exe-vecpos.vec-infopos.txt-num25-w40-h402.pause说明:25是正样本图片的数量4040是正样本图片的宽高这些参数的详细解释:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html运行后会生成pos.vec文件6.使用opencv提供的opencv_traincascade.exe程序训练分类器,新建xml文件夹,再新建批处理文件:LBP_train.bat内容如下:1.opencv_traincascade.exe-dataxml-vecpos.vec-bgneg.txt-numPos25-numNeg666-numStages10-w40-h40-minHitRate0.999-maxFalseAlarmRate0.2-weightTrimRate0.95-featureTypeLBP2.pause说明:25是正样本图片的数量666是负样本图片的数量numNeg是层级数4040是训练样本的宽高.....具体参数解释请查看文档:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user_guide/ug_traincascade.html运行后会在xml文件夹生成如下文件:其中cascade.xml是我们需要使用的分类器四.测试训练好的分类器1...