python作物识别-Python-OpenCV——物体识别(TrainCascadeCl。。。.pdf

python作物识别-Python-OpenCV——物体识别(TrainCascadeCl。。。.pdf

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

python作物识别_Python-OpenCV——物体识别

(TrainCascadeCl。。。

在上次教程Python-OpenCV——MachineLearning讲述了如何建⽴模型,进⾏训练,然后利⽤模型对新获得的照⽚进⾏预测并给出预

测值,本期教程针对某个特定的物体进⾏检测,将其标记出来,分为3个步骤,第⼀:训练特定物体,第⼆:

训练模型

级联分类器

前⼏天看到⼀个笑话,很有意思,说的是

理论就是你什么都知道但是什么都⼲不了

实践就是你什么都能⼲但是不知道为什么

我就不⼀样了,我可以理论与实践相结合——什么都⼲不了⽽且不知道为什么

开个玩笑,⽬前有很⼤⼀部分的东西都是⼈们实践得来的经验,有些东西也许很好⽤,但未必是好理论,⽐如现在的深度学习,扯远了,继

续今天的话题,到底什么是级联分类器,其实就是把分类器按照⼀定的顺序联合到⼀起。⼀个分类器也许不好⽤,没关系,我给你多加⼏

个,俗话说得好,三个臭⽪匠,顶个诸葛亮呢。

具体来说,OpenCV实现的Cascade(级联)分类器就是基于多个弱分类器对不同的特征进⾏依次处理(分类)来完成对⽬标的检测,简单的说

有多个弱分类器串起来,然后提取每个平滑窗上的不同特征,把这些特征依次放进不同的弱分类器⾥判断,如果所有的弱分类器都判断正标

签,则表⽰该该平滑窗内检测到⽬标。这样做的好处是不但通过多个弱分类器来形成⼀个强的级联分类器,⽽且可以减少运算量,⽐如当⼀

个平滑窗第⼀个特征没有通过第⼀个分类器,那么就没有必要继续运算下去,直接拒绝掉当前平滑窗,转⽽处理下⼀个平滑窗,事实上作者

的⽬的就是为了快速抛弃没有⽬标的平滑窗,从⽽达到快速检测⽬标。

本次⽤到了OpenCV的两个程序,分别是opencv_createsamples.exe和opencv_traincascade.exe,分别⽤来创建样本⽂件和训练级联

分类器。

准备训练数据

正样本

正样本就是你要检测的东西,⽐如说⾹蕉、车牌、酒瓶、红绿灯等等,你可以找相关的数据集,或者⾃⼰⼿动截图,只取你想要识别的那部

分,下⾯我给了⼀个⼩程序⽤来将你截取的图⽚都变成统⼀⼤⼩。

#改变图⽚尺⼨为统⼀⼤⼩,在当前⽬录创建⼀个名为pos的⽂件夹

#把需要统⼀尺⼨的正样本放到⾥⾯,写上尺⼨,运⾏程序就可以了,⼀般来说建议长宽在100像素⼀下,不然训练会很慢

importcv2

importos

w=**

h=**

defgetimage(file_dir):

images={}

forroot,dirs,filesinos.walk(file_dir):

fornameinfiles:

images[name]=os.path.join(root,name)

returnimages

if__name__==__main__:

n=-1

aa=os.getcwd()

dirpath=os.path.join(aa,pos)

imagedic=getimage(dirpath)

try:

forkey,valueinimagedic.items():

img=cv2.imread(value)

img1=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

img2=cv2.resize(img1,(w,h))

cv2.imwrite(pos+str(n+1).rjust(3,0)+.jpg,img2)

n+=1

exceptKeyboardInterrupt:

print(暂停⼀下)

修改完图⽚尺⼨之后,需要⽣成图⽚的路径,我也写了⼀个代码,运⾏后,会在当前⽬录⽣成⼀个如图所⽰的⽂件

pos.txt

每⼀⾏分别代表⽂件路径1代表⾥⾯有⼏个⽬标,咱们⽤的截取好的,所以只有⼀个,然后0060120分别代表着图⽚的起始像素和终

⽌像素的长宽

#会在当前⽬录⽣成⼀个如图所⽰的⽂件,记得修改wh为上⾯修改后的尺⼨值

importos

defgetimage(file_dir):

images={}

forroot,dirs,filesinos.walk(file_dir):

fornameinfiles:

images[name]=os.path.join(root,name)

returnimages

if__name__==__main__:

n=0

aa=os.getcw

文档评论(0)

181****2790 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档