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