如何选择一个对象并永远跟踪它?

时间:2015-07-25 08:12:29

标签: python image-processing tracking opencv3.1

我正在尝试跟踪蚂蚁,这真的很难,因为蚂蚁改变了它的形状,我正在使用灰度视频。这意味着,mosse和camshit对我的项目没有任何作用。

我必须跟踪1个特殊的(不是随机的),因为我需要采取其立场并进行一些分析。所以我需要一种方法来选择一只蚂蚁并永远跟踪它,我尝试了一切,但没有任何效果。

好吧,我可以手动设置蚂蚁位置,或者通过鼠标设置蚂蚁位置,这不是问题,问题是如何在设置第一个位置后继续跟踪同一个蚂蚁。

我在我的代码上使用knn过滤器使其变得更容易,因为我的所有蚂蚁都是白色的,背景是黑色的。

这是我的代码:

import numpy as np
import cv2

class ColourTracker:
def __init__(self):
    cv2.namedWindow("Background")
    cv2.namedWindow("Frame")

    self.capture = cv2.VideoCapture('video.avi')
    self.knn = cv2.createBackgroundSubtractorKNN()

def run(self):
    while True:
        f, orig_img = self.capture.read()

        if( not f ):
            break;

        fore = self.knn.apply( orig_img )
        back = self.knn.getBackgroundImage()
        kernel = np.ones((5,5),np.uint8)
        fore = cv2.erode( fore, kernel )
        fore = cv2.dilate( fore, kernel )
       # fore = fore[r:r+h, c:c+w]
        image, contours, hiearchy = cv2.findContours( fore, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE )



        maximumArea = 0
        bestContour = None
        for contour in contours:
            currentArea = cv2.contourArea(contour)
            if currentArea > maximumArea:
                bestContour = contour
                maximumArea = currentArea

                x,y,w,h = cv2.boundingRect(bestContour)
                cv2.rectangle(orig_img, (x,y),(x+w,y+h), (0,0,255), 3)        

        cv2.imshow( "Background", back )
        cv2.imshow( "Frame", orig_img )

        k = cv2.waitKey(24) & 0xff 
        print k
        if k == 27:
            break
if __name__ == "__main__":
colour_tracker = ColourTracker()
colour_tracker.run()

0 个答案:

没有答案