使用平均移位-OpenCV跟踪固定区域

时间:2014-01-16 09:34:08

标签: python opencv raspberry-pi

我需要你在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

谢谢!

0 个答案:

没有答案