我是一年级CS学生,而且我只知道一点点python。对于一个项目,我需要使用OpenCV来检测多个交通标志。我在网上搜索了一下,然后决定使用Haar-Cascade分类器。我遵循了本教程:haar-cascade
我训练了此标志left-sign的代码 到目前为止,一切都很好。但是我的代码(训练有3000个正1500个负jpg并完成了8个阶段)可以检测到左右符号。代码需要分别识别左右标志,因为我的目的是命令机器人左转或右转。
这是我的代码:
import numpy as np
import cv2
ok_cascade = cv2.CascadeClassifier('new_kocum.xml')
cap = cv2.VideoCapture(0)
while 1:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
oks = ok_cascade.detectMultiScale(gray,3,5)
for (x,y,w,h) in oks:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,255,0),2)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'ok',(x-w,y-h), font, 0.5, (11,255,255), 2, cv2.LINE_AA)
cv2.imshow('img',img)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
这是正确的标志:right-sign
所以我的问题是:是否可以仅通过更改代码来解决该问题?如果更容易,应该使用哪种方法检测这些迹象?
答案 0 :(得分:0)
正确的方法:您需要向负数添加很多正确的符号。
最好的方法:不要使用haar-cascade。
最简单的方法:训练第二个分类器(例如朴素的贝叶斯),以便在层叠后进行左右符号的比较。功能:图像之间的相关性,Hu-Moments等。