2017-08-09 5 views
0

を解決するために、私はthisリンクをフォローしていました。最初のリンクでは、「マスク」を作成することができます。次のオブジェクトがその「マスク」に非常に近い場合、同じオブジェクトである可能性があるため、検出しません。しかし、距離がある場合は、それを検出し、最後まで追跡する必要があります。マスキングによって検出されたオブジェクトにマークを付ける

しかし、私はマスクを作成し、それを除外するために条件文を使用する方法を得ていません。だから、マスクを作ることの最初の問題があります。オブジェクトのマスクを作成できれば、それを次の検出から除外しようとすることができます。

import cv2 
import numpy as np 

cap = cv2.VideoCapture('anyvideo.mp4') 

while(1): 

    # Take each frame 
    ret, frame = cap.read() 

    if ret: 

     # detect the object and get contour of the image. I'm calling it bbox 

     tracker = cv2.Tracker_create("KCF") 
     ok = tracker.init(frame, tuple(bbox)) 
     ok, bbox = tracker.update(frame) 
     p1 = (int(bbox[0]), int(bbox[1])) 
     p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3])) 
     cv2.rectangle(frame, p1, p2, (0,0,255)) 
     cv2.putText(frame, 'Tracked', (x + 25,y + 10), cv2.FONT_HERSHEY_SIMPLEX,1, (255,255,255), 2, cv2.LINE_AA) 
     mask = np.full((frame.shape[0], frame.shape[1]), 0, dtype=np.uint8) 
     res = res.append(cv2.bitwise_and(frame,frame,mask = mask)) 


     k = cv2.waitKey(5) & 0xFF 
     if k == 27: 
      break 
    else: 
     break 
cap.release() 
cv2.destroyAllWindows() 

ありがとう!

答えて

0

まず、参照の画像を、同じ背景にあるオブジェクトなしで撮影します。次に、は、オブジェクトが存在するイメージをから引く。それはあなたにある価値を与え、オブジェクトが存在するところでゼロを期待します。それにバイナリしきい値を実行します。今はあなただけのオブジェクトを持っています。 マスクとして使用してください。

+0

あなたの答えをありがとう。私はマスクを作成し、それに応じてコードを更新しました。今私はそれを既に追跡された画像を取り除くためのフィルタとして使うことができます。 – arijit

+0

私が前に提案したように、 'Perform this binary on threshold '。これ以降、あなたはそれの輪郭をとることができます。それの質量の中心を計算し、オブジェクトの適切な領域をトリミングします。重心を使用すると、相対的な位置を計算できます。残りのアルゴリズムは、あなたのロジックに依存します。任意のアルゴリズムまたは独自のロジックを使用してオブジェクトを追跡できます。 – Akhilesh

+0

@arijit、もしあなたが助けを必要とするなら、あなたは聞くことができます。あなたがこの回答を参考にして、それを投票し、答えとして選択するならば。 – Akhilesh

関連する問題