我需要你在OpenCV的帮助。我是一名学生,我实际上在一个项目中工作,该项目包括一辆小型自动驾驶汽车。我使用Python作为主要的语言编程。
我的手段有问题。我希望当我运行程序时,相机会在地板上固定一个区域并留在这个区域。因为我希望汽车驾驶单独跟随地板,我不希望那个装备发现另一个与地板不同的物体。因此,该计划运作良好,但不是最佳的地板...... 你有解决方案或方法继续吗? (对不起,如果我的英语不太好)
def camshift(frame1,frame2,trackWindow) :
points=[]
size1=frame1.shape[0] #Largeur
size2=frame1.shape[1] #longueur
#hsv referentiel
hsv = cv2.cvtColor(frame1, cv2.COLOR_BGR2HSV)
#Mask
mask = cv2.inRange(hsv,np.array((0., 60.,32.)), np.array((180.,255.,255.)))
x0, y0, w, h = trackWindow
trackWindow1=[x0,y0,w,h]
x1 = x0 + w -1
y1 = y0 + h -1
hsv_roi = hsv[y0:y1, x0:x1]
mask_roi = mask[y0:y1, x0:x1]
#Calcule l'histogramme dans cette region
hist = cv2.calcHist( [hsv_roi], [0], mask_roi, [16], [0, 180] )
#Normalisation
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX);
hist_flat = hist.reshape(-1)
points.append(hsv)
prob = cv2.calcBackProject([hsv,cv2.cvtColor(frame2, cv.CV_BGR2HSV)],[0],hist_flat, [0,180],1)
prob &= mask
term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 )
#Verification des conditions pour pas que ca sorte
if (trackWindow[0] < 0) :
trackWindow[0] = 0
if (trackWindow[1] < 0) :
trackWindow[1] = 0
if (trackWindow[0]+trackWindow[3] >= size1) :
trackWindow1.append(size1-y0)
w=trackWindow1[4]
trackWindow1.pop()
if (trackWindow[0]+trackWindow[2] >= size2) :
trackWindow1.append(size2-x0)
h=trackWindow1[4]
trackWindow1.pop()
x0, y0, w, h = trackWindow
if (trackWindow[0]+trackWindow[2])<100 :
trackWindow = (125,125,200,100)
if (trackWindow[1]+trackWindow[3])<100 :
trackWindow = (125,125,200,100)
# self.ellipse, trackWindow = cv2.CamShift(prob, trackWindow, term_crit)
new_ellipse, track_window = cv2.CamShift(prob,trackWindow, term_crit)
#On dessine le rectangle sur la region d'interet
cv2.rectangle(frame1, (trackWindow[0],trackWindow[1]), (trackWindow[0]+trackWindow[2],trackWindow[1]+trackWindow[3]), color=(255,0,0))
cv2.imshow("mask",mask)
return track_window
谢谢!