91730


ある動画のフレームを読み込んでROIを囲み、トラッキングするコードを作っています。

その際１フレーム目ではなく、〇フレーム目といったように好きなフレームをキャプチャしたいと思っていますがどのように改変すればよいでしょうか？どなたかご教授お願い致します。

[code]

    import cv2
    
       # KCF
    tracker = cv2.TrackerKCF_create()
    
     
    
    cap = cv2.VideoCapture(r"C:\Users\****\OneDrive\デスクトップ\MYpython\sample_speed3.mp4")
    
    
    
    while True:
           ret, frame = cap.read()
           if not ret:
               continue
           bbox = (0,0,10,10)
           bbox = cv2.selectROI(frame, False)
           ok = tracker.init(frame, bbox)
           cv2.destroyAllWindows()
           break
    
    while True:
           # VideoCaptureから1フレーム読み込む
           ret, frame = cap.read()
           
           if not ret:
               k = cv2.waitKey(1)
               if k == 27 :
                   break
               continue
    
           # Start timer
           timer = cv2.getTickCount()
    
           # トラッカーをアップデートする
           track, bbox = tracker.update(frame)
    
           # FPSを計算する
           fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);
    
           # 検出した場所に四角を書く
           if track:
               # Tracking success
               p1 = (int(bbox[0]), int(bbox[1]))
               p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
               cv2.rectangle(frame, p1, p2, (0,255,0), 2, 1)
               
           else :
               # トラッキングが外れたら警告を表示する
               cv2.putText(frame, "Failure", (10,50), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1, cv2.LINE_AA);
    
    
           # FPSを表示する
           cv2.putText(frame, "FPS : " + str(int(fps)), (10,20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1, cv2.LINE_AA);
    
           # 加工済の画像を表示する
           cv2.imshow("Tracking", frame)
    
           # キー入力を1ms待って、k が27（ESC）だったらBreakする
           k = cv2.waitKey(1)
           if k == 27 :
               break
    
    
    
    while True:
       ret, frame = cap.read()                                         
    
       # フレームが取得できない場合はループを抜ける
       if not ret:
           break
    # キャプチャをリリースして、ウィンドウをすべて閉じる
    cap.release()
    cv2.destroyAllWindows()
    
    
    
    print(p1)
    
[/code]


CC BY-SA 4.0
2022-10-21T13:07:13.547
91727
2022-10-23T07:18:37.793
41571
question
python opencv
特定のフレームをキャプチャし使用したい

[code]

    set(cv2.CAP_PROP_POS_FRAMES, フレーム数)
    
[/code]

を用いることによって任意のフレームまで進めるようです。

参考リンク  
・[https://note.nkmk.me/python-opencv-videocapture-file-
camera/](https://note.nkmk.me/python-opencv-videocapture-file-
camera/#:%7E:text=%E7%8F%BE%E5%9C%A8%E4%BD%8D%E7%BD%AE%E3%82%92%E4%BB%BB%E6%84%8F%E3%81%AE%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%AB%E7%A7%BB%E5%8B%95%E3%81%95%E3%81%9B%E3%81%9F%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AFset\(\)%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E4%BD%BF%E3%81%86%E3%80%82)  
・[https://algorithm.joho.info/programming/python/opencv-videocapture-
mp4-movie-py/](https://algorithm.joho.info/programming/python/opencv-
videocapture-mp4-movie-
py/#:%7E:text=%E3%81%BE%E3%81%9F%E3%80%81%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%81%AE%E7%8F%BE%E5%9C%A8%E4%BD%8D%E7%BD%AE%E3%82%92%E4%BB%BB%E6%84%8F%E3%81%AB%E7%A7%BB%E5%8B%95%E3%81%95%E3%81%9B%E3%82%8B%E3%81%93%E3%81%A8%E3%82%82%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82)


CC BY-SA 4.0
2022-10-21T23:44:48.663
91730
2022-10-23T07:18:37.793
2022-10-23T07:18:37.793
54864
54864
91727
answer


コードを以下のように追加することで解決しました。  
ご協力ありがとうございました。

[code]

    cap = cv2.VideoCapture("con1.mp4")
    cap.set(cv2.CAP_PROP_POS_FRAMES, 3000)
    
[/code]


CC BY-SA 4.0
2022-10-22T04:14:04.963
91734
2022-10-22T04:14:04.963
41571
91727
answer