opencv物体识别,基于opencv的物体识别与测距

  opencv物体识别,基于opencv的物体识别与测距

  环境:python3.7 OpenCV3.4.3.18

  工具:

  opencv_annotation.exe

  opencv_createsamples.exe

  opencv_traincascade.exe

  下载环境和工具

  OpenCV库在cmd上执行终端命令。

  pip install-I https://pypi.tuna.Tsinghua.edu.cn/simple opencv-contrib-python==3 . 4 . 3。18

  包括OpenCV的主要模块和OpenCV贡献库。

  在GitHub上下载该工具

  3359 github.com/opencv/opencv/releases?在=3.4.3之后

  安装OpenCV后,它位于以下目录中

  一.准备阶段

  文件模板

  Positive_images放置正样本图像,negative_image放置负样本图像,xml是一个训练良好的分类器文件。

  试样收集

  阳性样本:我想要与正确分类的类别相对应的样本。例如,如果对图像进行分类以确定其是否属于菠萝,则菠萝图像在训练期间是正样本。

  负样:不是我们想要的分类对应的样品,而是去掉菠萝后的照片。

  样本越多,检测效果越好,阳性样本特征越明显,阴性样本背景越复杂。

  1.去www.kaggle.com下载所需的数据集,或使用scrapy selenium登录大量图片。

  2.自己拍摄想要探测的物体的图像。

  二。预处理

  图像注水处理:通过自动旋转、平移和缩放图像来增加样本数量。

  例如通过旋转。

  “路径”是图像路径。执行后" def spin(path):retval=cv2 . im read)path " He,we=retval . shape(33602)path 12):m=cv2 . get rotation matrix 2d(center=(we/

  Path是图像的路径,运行时会在同一个目录下生成五个亮度递增的图像。deflight(path):retval=cv2 . im read(path)img _ HSV=cv2 . CVT color)retval,cv2 . color _ bgr 2 HSV(darker)2)2 * y darker _ img=cv2 . CVT color(darker _ HSV,cv2。COLOR _ HSV 2 bgr)new _ path=path(:-3))-light

  给批处理文件夹中的图像文件重新命名

  importsfromportimageclassbatchrename(:def _ init _)self:self . path=r 。\ positive _ images def I=0 for item infilelist:if item . ends with(。jpg)):src=OS . path . join(OS . path . abspath)self . path,id

  如果_ _ name _ _= _ _ main _ :demo=batch rename()demo . rename(),则继续打印

  批量修改图片尺寸

  从PIL导入Image import OS . path import glob def convert jpg(jpg file,outdir,width=40,height=40):img=Image . open(jpg file)try:new _ img=img . resize((width,height),Image。双线性)new _ img . save(OS . path . join(outdir,OS . path . basename(jpg file)))exception as e:print(e)for jpg file in glob . glob(r 。\ positive _ images \ *jpg): #像素被修改并存储在图像文件convertjpg (jpgfile,r 中。\ positive _ images) III

  注释工具opencv_annotation.exe可用于生成正样本描述文件。

  opencv_annotation.exe的使用方法,在当前目录cmd下输入opencv_annotation.exe即可看到使用说明。

  示例:opencv_annotation.exe-a=生成的pos.txt路径-i=正样本文件夹路径。

  用鼠标左键标记矩形框,选择要识别的对象。

  在英语中, c 是确认框选择, d 是删除选中的框, n 是下一个, esc 是停止。

  如果图片中只有一个物体,可以直接生成描述文件(尝试用opencv_annotation自己标记,效果更好)

   file _ dir=OS . getcwd()print(file _ dir)file _ dir=r 。\ positive _ images l=[]I=0 with open(r 。\pos.txt , w )作为f:用于os中的根、目录、文件。Walk (file _ dir):对于文件中的文件:if OS。path.split text (file) [1]==。 jpg: L. append (OS。path.join (root,file)) F. write (L [I] 1 0 )

  生成阴性样本描述文件(无标签)

   file_dir=r 。\ negative _ image l=[]I=0 with open(r 。\neg.txt , w )作为f:用于OS中的根、目录、文件。Walk (file _ dir):对于文件中的文件:if OS。path.split text (file) [1]==。 jpg: L. append (OS。path.join (root,file)) F. write (L [I] \ n) I

  四。样本vec文件的合成

  这里只需要合成正样本的vec文件,不需要合成负样本。这里,我们使用opencv_createsamples.exe

  opencv_createsamples.exe的使用方法,在当前目录cmd下输入opencv_createsamples.exe即可看到使用说明。

  opencv _ create samples . exe-vec pos . vec-info pos . txt-num 50-w40-h40

  -vec参数表示的存储位置。vec文件;

  -info表示生成的注释的位置;

  -由-num生成的阳性样本数

  -w窗口的宽度;-h窗口的高度;

  之后,在当前目录下生成pos.vec文件。

  动词(verb的缩写)培训模式

  训练模型使用opencv_traincascade.exe

  opencv_traincascade.exe的使用方法,在当前目录cmd下输入opencv_traincascade.exe查看使用说明。

  示例:opencv _ train cascade . exe-data XML-vec pos . vec-BG neg . txt-num pos 10-num neg 2000-numstages 15-w40-h40-min hitrate 0.999-maxfalsealarmrate 0.5-modeall

  -数据:指定保存训练结果的文件夹;

  -vec:指定一个正样本集;

  -bg:指定阴性样本的描述文件夹;

  -numPos:指定每个级别的阳性样本数(小于阳性样本总数);

  -numNeg:指定每一级参与训练的负样本数(可以大于负样本图片总数);

  -numStage:训练阶段的数量;

  -w:阳性样本的宽度;-h:阳性样品的高度;(必须与opencv_createsample中使用的-w和-h值一致)

  -minHitRate:每个等级需要达到的命中率(一般0.95-0.995);

  -maxFalseAlarmRate:每一级允许的最大误检率;

  -mode:使用Haar-like特征时使用;基本、核心或全部;可以选择;(全部使用垂直和45度旋转功能。)

  (此截图为模型训练后再次运行opencv_traincascade.exe的结果)

  用于训练分类器的文件在xml文件夹中。

  不及物动词试验模型

  import numpy as NP import cv2 # load cascade pineapp _ cascade=cv2 . cascade classifier(r XML \ cascade . XML )# detect def detect(image):#将图像转换为灰度图像gray=cv2.cvtcolor (image,cv2.color _ bgr2gray) #调用cascade pineapp=face _ cascade . detect multi Scale(gray,Scale factor=1.15,min neighbors=5,min size=(10,10))print(pineapples)print( Found { 0 } pineapples!。format (len (pineapples)) #绘制菠萝中(x,y,w,h)的菠萝区域:cv2.circle (image,(int ((x x w)/2),int ((y y h)/2),int (w/2),25,0),2)返回图像retval=cv2 . im read(r test . jpg )image=detect(retval)cv2 . im write( detect . jpg ,image)运行后生成检测到的图像detect.jpg(这里只是展示,样本很少,效果不是很好)

  以上只是训练步骤的简单演示,供参考学习。

郑重声明:本文由网友发布,不代表盛行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孔洞填充函数的实现思路与代码
  • 留言与评论(共有 条评论)
       
    验证码: