Редактировать: Обнаружение движения Я полагаю, что это может ответить на мой вопрос ...
Я хочу не только обнаружить движение, но и прочитать, где движение произошло в кадре. Ничто в MotionDetector
не имеет ничего общего с его местоположением. Я подумал, что, возможно, смогу запустить его через MotionDetector
, а затем извлечь самый большой блоб, но это тоже не сработает. Он подхватывает только одну каплю.
Видеоролик - это машина, спускающаяся по трапу. mainPBX - это оригинальный кадр, main2PBX - это измененный кадр (с наложением самого большого двоичного объекта). Моя мысль - читать, когда капля переходит от меньшего к большему (и наоборот), чтобы определить вход или выход.
Private Sub Processor()
Dim bc As New BlobCounter With {
.MinWidth = 5,
.MinHeight = 5,
.ObjectsOrder = ObjectsOrder.Size
}
Dim detector As New MotionDetector(New SimpleBackgroundModelingDetector, New MotionAreaHighlighting)
Using reader As New AForge.Video.FFMPEG.VideoFileReader()
reader.Open("C:\Videos\MyVideo.mp4")
For i As Integer = 0 To reader.FrameCount - 1
Dim frame = reader.ReadVideoFrame()
Dim frame2 As Bitmap = frame.Clone()
Dim frame3 As Bitmap = frame.Clone()
detector.ProcessFrame(frame2)
bc.ProcessImage(frame2)
Dim blobs = bc.GetObjectsInformation()
If blobs.Length > 0 Then
bc.ExtractBlobsImage(frame3, blobs(0), True)
PBX_Image(main2PBX, frame3.Clone())
End If
PBX_Image(mainPBX, frame.Clone())
Threading.Thread.Sleep(25)
frame.Dispose()
frame2.Dispose()
frame3.Dispose()
Next
End Using
End Sub