ある夜の間にウェブカメラで静止画像をキャプチャしました。画像の照明が均一であるため、大部分は同じです。ただし、一部は他の部分とは大幅に異なります。フレーム内で人間の動きが見えます。
動きが画像に含まれるように、どの画像が大幅に異なるかをどのように検出できますか?さらに良いことに、動きを具体的に検出する方法はありますか?
OpenCVやSimpleCVのようなライブラリはこれを簡単に実現できると思いますが、私はそれらを使用することに限定されていません。
ある夜の間にウェブカメラで静止画像をキャプチャしました。画像の照明が均一であるため、大部分は同じです。ただし、一部は他の部分とは大幅に異なります。フレーム内で人間の動きが見えます。
動きが画像に含まれるように、どの画像が大幅に異なるかをどのように検出できますか?さらに良いことに、動きを具体的に検出する方法はありますか?
OpenCVやSimpleCVのようなライブラリはこれを簡単に実現できると思いますが、私はそれらを使用することに限定されていません。
SimpleCVでは、
cam = Camera()
prev = cam.getImage()
while True:
current = cam.getImage()
fs = current.findMotion(prev, method="LK")
if fs: #if there's motion
print "motion found"
prev = current
Image.findMotion()
オプティカルフローを使用して動きを検出します。これはとても簡単に使えます。どのくらいの動きを期待するかに関する条件を追加します。
fs.dx
fs.dy
動きが検出されたすべてのポイントを提供します。
カメラから入力を取り、水平方向と垂直方向の動きを検出することで、BansheeMediaPlayerを制御する例を作成しました。ここで私のGitHubで見つけることができます。
あなたが探しているものは、バックグラウンド減算と呼ばれます:
(画像はこの記事から取られています)
このSOディスカッションを見てください。
また、OpenCVには多くの記事/例があるので、グーグルで検索してください。
あなたが持っている最初の画像が同じ種類のものである場合、最初の画像からのすべての画像の絶対差を見つけることができ、大幅に異なる画像を見つけるためのしきい値があります。また、openCVでは、ビデオの動きを検出するために、次のようなことができます: http ://sundararajana.blogspot.in/2007/05/motion-detection-using-opencv.html