2016-06-24 8 views
3

画面上を移動するブロックの中心から、保存されたx、y座標のリストにアクセスする際に問題があります。私は正常に各フレームのブロックのxとyの座標を取得することができましたが、この情報を格納し、特定の段階でポイントにアクセスすることができないという問題があります。 私の目的は、ポイントを結びつけてトレイルを形成することです。 私は現在何があります。移動オブジェクトから取得したポイントのリスト

クラス定義:

class People: 

     def __init__(self): 
      self.x = 0 
      self.y = 0 

は中心が検出された各ポイントで、CXとCYが正しく更新されていることを前提としています。

MultPeople=[] 

次は、フレームごとにビデオを通じて

Person=People() 
    Person.x=cX 
    Person.y=cY 
    MultPeople.append(Person) 

を行くが、私は、ドットに参加するために順次これらの点にアクセスする際に、今、私はそれらを得ることができていますループ内で収まります一度に1つしかできません。

for index,man in enumerate(MultPeople): 
     print (index,man.x,man.y) 
     xplot=man.x 
     yplot=man.y 
     cv2.circle(frame1, (xplot, yplot), 2, [50, 20, 255], 3) 

これが正常に中心点で、元の画像の上に円を描くが、その答えは、インデックスの値を取得するために添加する必要があるもの、この

(0, 306, 379) 
    (0, 307, 377) 
    (0, 307, 384) 
    (0, 305, 396) 
    (0, 309, 409) 
    (0, 310, 431) 

のように戻って与えています私は、これが特定のポイントにアクセスするために必要であると仮定しています。

私も、インデックスを印刷した後man.xを次の行を入力しman.y

 print np.size(MultPeople) 

、それが戻って1たびに印刷し、私は問題を考えていることはそれとしてアペンド機能がゆえであります毎回リストに新しい値を追加するのではありませんが、これをどのように修正すべきか分かりません。

答えて

2

このような問題が発生しにくいため、更新ループのすべてのコードを改行なしで「そのまま」印刷ループに掲載してください。しかし、私が見たものから - あなたはおそらくあなたのリストを作成した、更新ループ内で更新され、印刷された、このような:

while condition: 
    MultPeople=[] 
    Person=People() 
    # Here you somehow get the new cX and cY values 
    Person.x=cX 
    Person.y=cY 
    MultPeople.append(Person) 
    for index,man in enumerate(MultPeople): 
     print (index,man.x,man.y) 
     xplot=man.x 
     yplot=man.y 
     cv2.circle(frame1, (xplot, yplot), 2, [50, 20, 255], 3) 

だから、リストMultPeopleが作成され、一つの項目を追加し、forループは、リストの上に行きます1つのアイテム(つまり、index == 0size1の1回のみ実行されます)が表示され、結果が表示されます。

つまり、私の推測が正しい場合です。あなたは実際にコードをそのまま残しておくべきです。それを断片的に細断して読むのは本当に難しいです。

それはあなたが実際に何をしたい場合なら次のとおりです。

MultPeople=[] 
while condition: 
    Person=People() 
    # Here you somehow get the new cX and cY values 
    Person.x=cX 
    Person.y=cY 
    MultPeople.append(Person) 
for index,man in enumerate(MultPeople): 
    print (index,man.x,man.y) 
    xplot=man.x 
    yplot=man.y 
    cv2.circle(frame1, (xplot, yplot), 2, [50, 20, 255], 3) 
+1

は、whileループが問題を修正外の宣言を移動、ありがとうございます。謝罪、将来の質問で完全なコードを投稿する –

関連する問題