无人机反馈:物体检测/颜色检测?是否有办法隔离特定对象的检测

时间:2017-10-04 12:21:50

标签: python c++ opencv ar.drone

Tracking Picture我一直在编写一个代码,其中A.R Drone 2.0将检测颜色并在图像中间放置一个红点。我正在为无人机使用流媒体。目标是让无人机探测到一条白色的水槽,然后从一个点直接飞到另一个点。基本上遵循一条线。我注意到当我将BGR更改为0,0,255时,我得到了整个排水沟,但它也检测到了白点。是否只是为了看到排水沟来隔离我的检测。也许使用形状,一旦检测到排水沟,就放一个边界框。我最后的问题是如何告诉我的无人机跟随红点或者画一条线。我查看了python-AR无人机库,但不知道如何应用它。这是我的代码。

import numpy as np    
import cv2        


# open the camera    
cap = cv2.VideoCapture('tcp://192.168.1.1:5555')


def nothing(x):    
    pass

cv2.namedWindow('result')


# Starting with 100's to prevent error while masking    
h,s,v = 100,100,100            
# Creating track bar    
cv2.createTrackbar('h', 'result',0,179,nothing)    
cv2.createTrackbar('s', 'result',0,255,nothing)    
cv2.createTrackbar('v', 'result',0,255,nothing)    

while True:    
    #read the image from the camera    
    ret, frame = cap.read()            
    #You will need this later    
    frame = cv2.cvtColor(frame, 35)    

    #converting to HSV

    hsv = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)                   
    # get info from track bar and appy to result    
    h = cv2.getTrackbarPos('h','result')    
    s = cv2.getTrackbarPos('s','result')    
    v = cv2.getTrackbarPos('v','result')

    # Normal masking algorithm    
    lower_blue = np.array([h,s,v])    
    upper_blue = np.array([180,255,255])        

    mask = cv2.inRange(hsv,lower_blue, upper_blue)            
    result = cv2.bitwise_and(frame,frame,mask = mask)            
    cv2.imshow('result',result)            
    #find center    
    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"]))            
        if radius>10:    
            #cv2.circle(frame, (int(x),int(y)), int(radius), 2)    
            cv2.circle(frame, center,5,(0,0,255),-1)

    # color detection limits    
    lB = 5    
    lG = 50    
    lR = 50    
    hB = 15    
    hG = 255    
    hR = 255    
    lowerLimits = np.array([lB, lG, lR])    
    upperLimits = np.array([hB, hG, hR])            
    # Our operations on the frame come here    
    thresholded = cv2.inRange(frame, lowerLimits, upperLimits)    
    outimage = cv2.bitwise_and(frame, frame, mask = thresholded)                    
    cv2.imshow('original', frame)            
    # Display the resulting frame    
    cv2.imshow('processed',outimage)


    # Quit the program when Q is pressed    
    if cv2.waitKey(1) & 0xFF == ord('q'):    
         break       

# When everything done, release the capture    
print 'closing program'    
cap.release()
cv2.destroyAllWindows()

0 个答案:

没有答案