Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多对象跟踪OpenCV Python,轮廓不断交换_Python_Opencv - Fatal编程技术网

多对象跟踪OpenCV Python,轮廓不断交换

多对象跟踪OpenCV Python,轮廓不断交换,python,opencv,Python,Opencv,因此,我试图编写一个程序,跟踪3个相同大小和颜色的轮廓,同时保持单独识别,但轮廓不断从一个跳到另一个。例如,我在每个轮廓上都有红色、绿色和蓝色的圆圈,但轮廓#1会在红色和绿色之间翻转,反之亦然。我正在按大小对轮廓进行排序,但即使我没有,我仍然遇到同样的问题。我正在运行OpenCV 3.2和python 3.5 if len(cnts) > 2: cnts = sorted(

因此,我试图编写一个程序,跟踪3个相同大小和颜色的轮廓,同时保持单独识别,但轮廓不断从一个跳到另一个。例如,我在每个轮廓上都有红色、绿色和蓝色的圆圈,但轮廓#1会在红色和绿色之间翻转,反之亦然。我正在按大小对轮廓进行排序,但即使我没有,我仍然遇到同样的问题。我正在运行OpenCV 3.2和python 3.5

if len(cnts) > 2:                                                       
    cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:10]     
    for i in range(0,3):                                                
        ((x[i], y[i]), radius[i]) = cv2.minEnclosingCircle(cnts[i])     
        for i in range(0,3):                                            
            M = cv2.moments(cnts[i])                                    
            center[i] = (int(M["m10"]/ M["m00"]), int(M["m01"] / M["m00"]))
        if flag is False:                                               
            for i in range(0,3):                                        
                cup[i]=center[i]                                        
            flag = True                                                 
        else:                                                           
            if radius[i]>10:                                                            
                for i in range(0,3):                                        
                cup[i] = center[closestPoint(cup[i], center)]           
                #for i in range (0,3):                                  
                cv2.circle(frame, (int(cup[i][0]), int(cup[i][1])),     
                       int(radius[i]), color[i],2)                  
                cv2.circle(frame,(cup[i][0],cup[i][1]),5,(0,0,255),-1)  

使用概率跟踪:如果对象的速度没有“跳跃”太强了,假设速度变化为正态分布的恒定速度,你应该能够跟踪=>你可以为每个可能的顺序/轨迹分配一个概率,在几帧之后,你可能会找到正确的。我考虑使用粒子过滤器,而不是我的近点函数(基本上是最近的欧几里德测距仪)但是我不知道如何在我的脚本中实现它。你知道我应该如何对轮廓进行排序吗?如果我按大小排序,那么如果有任何阻碍,跟踪的轮廓将改变。也就是说,红色轮廓始终是最小的,因此最小轮廓将始终跟踪为红色。如果不按大小跟踪,则每次轮廓的顺序按位置更改时,跟踪都会再次翻转。i、 圆始终是底部的轮廓。你能发布一个典型的视频给人留下印象吗?希望这能澄清问题。我感谢迄今为止所有的帮助。