opencv实现物体识别,opencv识别视频中特定物体

  opencv实现物体识别,opencv识别视频中特定物体

  opencv 实时识别指定物体一. 引入opencv人脸识别大家应该都听说过。本文的目的是利用OpenCV从视频帧中识别出指定的物体,并对其进行分帧,所拍摄的物体图像可以保存。我们会讲整个过程,包括训练我们自己的分类器,使用训练好的分类器进行识别。这里以识别舌头为例。

  二。环境:1。python 3.6.3 2。opencv3.4.0

  3.训练你的分类器。

  1.注:训练集分为正样本和负样本,都是灰度图像。阳性样本的大小需要固定,一般在40*40左右。当计算机太大时,负样本的大小是不固定的,负样本的数量应该多于正样本的数量。少了就有问题了。图像批量还原工具下载:链接:https://pan.baidu.com/s/1pMAp19p密码:vpp1图像批量灰度处理:使用美图秀秀

  2.正样制作:用美图秀秀把舌头的图片全部剪下来(同样大小40*40)保存在文件夹pos里。当然,你可以先用一个大的方框把它们裁掉,然后用图片缩小工具进行尺寸缩小。最后用美图秀秀进行批量灰化。附加具有自动名称排序的Java代码:string path= c:\ \ users \ \ administrator \ \ desktop \ \ pos \ ;File f=新文件(路径);file[]files=f . list files();for(File File:files){ I;file.renameTo(新文件(路径I . file.getName()。拆分( \\ . )[1]));}处理后得到如下图:

  3.负样制作:以上操作类似,但此处不要求大小相同。但是,要识别的区域(如这里的舌头)不得包含在如下的负样本图片中:

  4.生成示例资源记录文件:

  A.阳性样本资源记录文件

  新建一个pos文件夹,将正例样本的灰度复制到里面,用JAVA代码生成正例样本资源记录文件:String Path= e:\ \ Tools \ \ Python \ \ Eclipse \ Work \ \ Python Test \ \ Demo \ \ 0202 \ \ IMG \ \ Train \ \ Tongue \。File txtfile=新文件(路径 pos . txt );file output stream fos=new file output stream(txt file);PrintWriter pw=new PrintWriter(fos,true);字符串s=“”;File[] files=新文件(路径)。list files();for(File File:files){ pw . println( pos/ File . getname() 1 0 0 40 40 );}生成后删除最后一行带(pos.txt)的内容,让正例资源记录文件内容如下:

  (1 0 0 40 40)分别指:量的左上坐标位置(x,y)和右下坐标位置(x,y)。处理后,将pos.txt移动到上一级文件夹。

  B.负样本资源记录文件

  新建一个neg文件夹,把负样的灰度复制到里面,用JAVA代码生成负样资源记录文件:String Path= E:\ \ Tools \ \ Python \ \ Eclipse \ Work \ \ Python Test \ \ Demo \ \ 0202 \ \ IMG \ \ Train \ \ Tongue。File txtfile=新文件(路径 neg . txt );file output stream fos=new file output stream(txt file);PrintWriter pw=new PrintWriter(fos,true);字符串s=“”;File[] files=新文件(路径)。list files();for(File File:files){ pw . println( neg/ File . getname());}生成后删除最后一行带有(neg.txt)的内容,让负样本资源记录文件内容如下:

  处理后,将negtxt移动到上一级文件夹

  得到如图所示的文件夹结构:

  5.使用opencv提供的opencv_createsamples.exe程序生成样本vec文件,并创建一个新的批处理文件:createsamples.bat,其内容如下:

  opencv _ create samples . exe-vec pos . vec-info pos . txt-num 25-w40-h40 pause描述:25是正样本图片的个数40 40是正样本图片的宽度和高度。

  这些参数的详细说明:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/user _指南/ug _ traincascade.html

  运行后会生成pos.vec文件。

  6.使用opencv提供的OpenCV _ traincascade.exe程序训练分类器,新建一个xml文件夹,然后新建一个批处理文件:LBP_train.bat有以下内容:

  opencv _ train级联。exe-data XML-vec pos。vec-BG阴性。txt-num pos 25-numeng 666-numStages 10-w 40-h 40-分钟命中率0.999-maxfalse alarm rate 0.2-重量trim rate 0.95-特征类型LBP暂停说明: 25是正样本图片的数量666是负样本图片的数量努姆涅是层级数40 40是训练样本的宽高.具体参数解释请查看文档:http://www。opencv。org。cn/opencvdoc/2。3 .2/html/doc/user _ guide/ug _ train级联。超文本标记语言

  运行后会在可扩展标记语言文件夹生成如下文件:

  其中cascade.xml是我们需要使用的分类器

  四。测试训练好的分类器

  创建于2018年年2月2日实时人脸检测@作者:nuohy 导入cv2#加载中文版自带的人脸分类器# faceCascade=cv2 .级联分类器(‘哈尔级联_正面_ alt 2。XML )#面层叠。load( E:/python/opencv/opencv/sources/data/Haar cascades/Haar cascade _ front face _ alt 2。XML )face cascade=cv2 .级联分类器(‘级联。XML’)面层叠。load( E:/tools/python/eclipse/work/python test/demo/0202/img/train/tongue/XML/cascade。XML )cap=cv2 .视频捕捉(0)flag=0 timef=10而True:flag=1 ret,frame=cap。read()img=frame。copy()gray=cv2。CVT颜色(框架,cv2 .COLOR _ bgr 2 gray)rect=面层叠。检测多尺度(gray,scaleFactor=1.15,minNeighbors=3,minSize=(3,3),flags=cv2 .im read _ gray)for(x,y,w,h) in rect: cv2.rectangle(frame,(x,y),(x w,y h),(0,255,0),2) #识别到物体后进行裁剪保存#jiequ=img[x:(x w),y:(y h)]# cv2。im write( E://tools//python//eclipse//work//python test//demo//0202//img// str(flag) . jpg ,解曲)#另存为jpg #读取到保存图片# if(标志% timeF==0):# cv2。im write( E://tools//python//eclipse//work//python test//demo//0202// str(flag) .jpg ,框架)#另存为jpg cv2.imshow(frame ,frame)if cv2。wait key(1)0x ff==ord( q ):break cap。释放()cv2。destroyallwindows()

  效果图如下所示:

  所有需要用到的文件下载地址:http://download . csdn . net/下载/qq_27063119/10238488(需要5积分,没有的至我邮箱nuohy@qq.com)

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • opencv图像识别数字,opencv 识别
  • opencv图像识别数字,opencv 识别,如何基于opencv实现简单的数字识别
  • opencv图像的旋转角度计算,opencv图像仿射变换
  • opencv图像的旋转角度计算,opencv图像仿射变换,OpenCV图像几何变换之透视变换
  • opencv图像的旋转角度计算,opencv 旋转任意角度
  • opencv图像的旋转角度计算,opencv 旋转任意角度,opencv图片的任意角度旋转实现示例
  • opencv图像处理函数,opencv图像轮廓合并
  • opencv图像处理函数,opencv图像轮廓合并,OpenCV图像处理之七种常用图像几何变换
  • opencv双线性插值函数,opencv 图像插值
  • LBPH人脸识别,基于opencv的人脸识别技术
  • LBPH人脸识别,基于opencv的人脸识别技术,Opencv LBPH人脸识别算法详解
  • ,,OpenCV黑帽运算(BLACKHAT)的使用
  • opencv双线性插值函数,opencv 图像插值,C++ OpenCV实现图像双三次插值算法详解
  • ,,C语言 OpenCV实现柱面投影
  • ,,C++ Opencv imfill孔洞填充函数的实现思路与代码
  • 留言与评论(共有 条评论)
       
    验证码: