Example #1
0
      for (x,y,w,h) in faces:
          cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
          
          center_x.append(x+w/2.0)
          center_y.append(y+h/2.0)
      print(len(center_x))
      if(len(center_x)>0):
          a=center_x[0]
          for i in range((len(center_x))-1):
              if(abs(CENTER-center_x[i+1])<abs(CENTER-a)):
                  a=center_x[i+1]
          print(a, "Following center",CENTER)
          current_difference = (a-CENTER)
          print ("Difference left %s" % (TDifference - current_difference))
  
          pidout = pid.compute_output(current_difference)
          pidout += baseAngle
          val=pidout
          if(a > CENTER ):
              print("<<<<<<<<<")
          
          elif(a< CENTER):
              print(">>>>>>>>>")
          
      if(val>180 or val<0):
          val=90
 # ser.write("%s\n"%val)     
  print("val",val)    
  baseAngle=val
  cv2.imshow('img',img)
  k = cv2.waitKey(30) & 0xff
    mask = cv2.erode(mask, None, iterations=2)
    mask = cv2.dilate(mask, None, iterations=2)

    cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
                            cv2.CHAIN_APPROX_SIMPLE)[-2]
    center = None

    if len(cnts) > 0:
        c = max(cnts, key=cv2.contourArea)
        ((x, y), radius) = cv2.minEnclosingCircle(c)
        M = cv2.moments(c)
        center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
        # print (600 - center[0])
        # print(center)

        pidout = int(pid.compute_output(600 - center[1]))
        pidout += baseThrust
        print("Height = ", 600 - center[1], "px, ", "Thrust = ", pidout)
        cf.commander.send_setpoint(rollTrim, pitchTrim, yawTrim, pidout)

        if radius > 10:
            cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2)
            cv2.circle(frame, center, 5, (0, 0, 255), -1)

    else:
        print("Out of bounds.")
        cf.commander.send_setpoint(rollTrim, pitchTrim, yawTrim, 40000)
        pass

    # pts.appendleft(center)