我有一个实时视频流我试图操纵以确定图像是否对焦。为实现这一目标,我将aforge.net与sobel运营商一起使用。我遇到的问题是因为流速度太快,我创建的函数在再次被调用之前没有完成,因此它出错了。
我开始按照以下方式接收视频流;
start
这会调用我的Return Sobel函数,如下所示,用于更新PictureBox控件;
Private Sub Video_NewFrame(ByVal sender As Object, ByVal eventArgs As NewFrameEventArgs)
Dim img As Bitmap = CType(eventArgs.Frame.Clone, Bitmap)
'do processing here
img_src.Image = img
img_sobel.Image = ReturnSobel(img)
End Sub
我试图使用一个队列,在程序开始时我将q声明为新队列(位图),然后在newframe sub中将img添加到队列中,然后在一个计时器中我尝试从最后一帧拉出队列和出队但是虽然队列不断增长(至少基于内存使用量),但sobel函数似乎从未被调用过。
我把它分开了一点,但我的队列概念就在这里;
Public Function ReturnSobel(InputImg1 As Bitmap) As Bitmap
Dim filter1 As SobelEdgeDetector = New SobelEdgeDetector
Dim GrayImage1 As Bitmap = Grayscale.CommonAlgorithms.BT709.Apply(InputImg1)
filter1.ApplyInPlace(GrayImage1)
Return GrayImage1
filter1 = Nothing
GrayImage1 = Nothing
End Function
我是否对队列概念做错了,还是有更好的方法来实现这个目标?
非常感谢!
答案 0 :(得分:0)
> Private Sub Video_NewFrame(ByVal sender As Object, ByVal eventArgs As
> NewFrameEventArgs)
> Dim img As Bitmap = CType(eventArgs.Frame.Clone, Bitmap)
> Dim Sobel as Bitmap = img
> img_src.Image = img 'do processing here
> SyncLock Sobel
> img_sobel.Image = ReturnSobel(Sobel)
> End SyncLock
> End Sub