私はプロジェクトに取り組んでおり、openCVの本を6時間以上グーグルで掘り下げた後、ちょっと困惑しました。
import cv2
import numpy as np
cap = cv2.VideoCapture('tree.avi')
count = 0
x_pos = 0
y_pos = 0
a_x = 180
a_y = 180
frames = 60
if (cap.isOpened()== False):
print("Error opening video stream or file")
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
resized = frame
scale_percent = 200
width = int(frame.shape[1] * scale_percent / 100)
height = int(frame.shape[0] * scale_percent / 100)
dim = (width, height)
if count < 50 or count >= 55:
cv2.moveWindow('Frame', x_pos, y_pos)
cv2.imshow('Frame', frame)
if count in range(50, 55):
resized = cv2.resize(frame, dim, interpolation = cv2.INTER_AREA)
cv2.imshow('Frame',resized)
x_pos = x_pos + int((a_x / frames) * (count - 50))
y_pos = y_pos + int((a_y / frames) * (count - 50))
cv2.moveWindow('Frame', x_pos, y_pos)
count = count + 1
if cv2.waitKey(25) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()
これは、私がインスピレーションを得たかなり一般的なコードです。私が達成したいのは、再生中にビデオウィンドウを画面上の別の場所に移動することです。経験から、特定のフレームの下に別のmoveWindow()を追加するだけで、各フレームに適用されるときにウィンドウが2つの間でファジーになることがわかっています。
たとえば、フレーム1〜100が(100,100)にあり、フレーム101〜200が(200、200)にあるようにする方法はありますか?リアルタイムであることが最善ですが、ビデオの再生中にユーザーがウィンドウを移動できるようにすることに関するヘルプは非常に高く評価されています。
前もって感謝します。
更新特定のフレームで移動するようにビデオを手動で設定する方法を見つけました。ただし、これはプリセット値に対してのみ機能するようです。(例)フレーム50〜55外部入力をリアルタイムで使用する方法はありますか?
私が達成したいのは、再生中にビデオウィンドウを画面上の別の場所に移動することです
上記のステートメントが主な関心事である場合は、を使用してくださいFileVideoStream
。
以前の回答で述べたように:
VideoCaptureパイプラインは、次のフレームの読み取りとデコードに最も多くの時間を費やします。次のフレームが読み取られ、デコードされ、返される間、OpenCVアプリケーションは完全にブロックされます。
これは、ビデオを移動している間、パイプラインが次のフレームをデコードできないため、アプリケーションがブロックされることを意味します。
例:以下は、ウィンドウを手動でドラッグしているときにフレームを表示しています。
import cv2
import time
from imutils.video import FileVideoStream
vs = FileVideoStream('result.mp4').start()
time.sleep(0.2)
while True:
frame = vs.read()
cv2.imshow("out", frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
vs.stop()
cv2.destroyAllWindows()
ここで、コードをいくつかの変数とマージすると、次のようになります。
import cv2
import time
from imutils.video import FileVideoStream
vs = FileVideoStream('result.mp4').start()
time.sleep(0.2)
count = 0
x_pos = 0
y_pos = 0
a_x = 180
a_y = 180
frames = 60
while True:
frame = vs.read()
scale_percent = 200
width = int(frame.shape[1] * scale_percent / 100)
height = int(frame.shape[0] * scale_percent / 100)
dim = (width, height)
if count in range(0, 55):
resized = cv2.resize(frame, dim, interpolation=cv2.INTER_AREA)
cv2.imshow('Frame', resized)
x_pos = x_pos + int((a_x / frames) * (count - 50))
y_pos = y_pos + int((a_y / frames) * (count - 50))
cv2.moveWindow('Frame', x_pos, y_pos)
cv2.imshow("out", frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
vs.stop()
cv2.destroyAllWindows()
2つのウィンドウが表示されます。1つは表示されており、2番目のウィンドウはウィンドウの右側の場所から左側の場所に移動しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加