gpt4 book ai didi

vb.net - 简单的Emgucv网络摄像头提要似乎内存泄漏

转载 作者:行者123 更新时间:2023-12-02 17:06:40 27 4
gpt4 key购买 nike

以下代码是我从一个更大的项目中从网络摄像头检索帧的方法:

Imports Emgu.CV
Imports Emgu.CV.CvEnum
Imports Emgu.CV.Structure
Imports Emgu.CV.UI
Imports Emgu.CV.Util

Public Class Form1

Dim img As Mat
Dim cam As VideoCapture

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

Try
cam = New VideoCapture(0)
Catch ex As Exception
'show error via message box
MessageBox.Show("unable To read from webcam, error: " + Environment.NewLine + Environment.NewLine +
ex.Message + Environment.NewLine + Environment.NewLine +
"Try another")
Return
End Try

AddHandler Application.Idle, New EventHandler(AddressOf Me.ProcessFrame)

End Sub

Sub ProcessFrame(sender As Object, arg As EventArgs)

img = cam.QueryFrame()
ImageBox1.Image = img

End Sub

End Class

基本上,它从网络摄像头抓取一个框架并将其插入表单上的图像框。运行代码时,我的内存消耗如下所示:

https://i.imgur.com/PRGULG9.png

我从中了解到,某些东西没有得到适当处理,但是我无法弄清楚它是什么。网络摄像头的MP越多,内存峰值越大。加载本地视频文件时也是一样。

最佳答案

Mat class实现IDisposable。在显示新图像之前在旧图像上调用Dispose()可能有助于最大程度地减少峰值,但是正如Lucas K所提到的,在GC运行之前,不能保证所有内容都会完全释放。

img = cam.QueryFrame()

'Dispose of the old image (if one exists).
If ImageBox1.Image IsNot Nothing Then ImageBox1.Image.Dispose()

ImageBox1.Image = img

通常,在使用完 Dispose()的所有类后,应该对它们进行调用(或在适用的情况下将它们包装在 IDisposable blocks中)。

关于vb.net - 简单的Emgucv网络摄像头提要似乎内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53132796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com