首页 > 解决方案 > VB.Net 上的 Emgu.CV 慢速图片框图像

问题描述

使用 Emgu.CV 版本 2.2.1.1150

我正在尝试查询帧并在图片框中显示,并且代码在具有 Microsoft LifeCam 720p 的台式计算机上运行良好 Picturebox 流畅而流畅,但是当我在 Windows 10 平板电脑(CHUWI HI10X)中尝试该程序时,图像滞后。

如果我在 Win10 相机应用程序中测试平板电脑相机,它们运行良好,视频高清流畅。

我更新了这些相机的驱动程序以检查是否是这样,但没有运气。

Public Class frmCamera
Dim imgFrame As Image(Of Bgr, Byte)
Dim vidCapture As Capture

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    vidCapture = New Capture(1)
    vidCapture.QueryFrame()
    AddHandler Application.Idle, AddressOf AppIdle
End Sub

Public Sub AppIdle(ByVal sender As System.Object, ByVal e As System.EventArgs)
    imgFrame = vidCapture.QueryFrame().Resize(800, 600, Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR)
    PictureBox1.Image = imgFrame.ToBitmap()
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    frmMain.Show()
    RemoveHandler Application.Idle, AddressOf AppIdle
    vidCapture.Dispose()
    Me.Close()
End Sub 

结束类

我尝试了多种帧大小和不同的插值类型,但没有成功。也从使用 imageBoxFrameGrabber 更改为将 PictureBox 转换为位图,但结果仍然相同。也尝试使用计时器,但看起来更糟。

谢谢!

编辑:

使用计时器我的代码最终没有运气。

Public Class frmCamera
Dim imgFrame As Image(Of Bgr, Byte)
Dim vidCapture As Capture

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Timer1.Interval = Timer1.Interval
    RichTextBox1.Text = "Interval:" + Convert.ToString(Timer1.Interval)
    Timer1.Start()
    vidCapture = New Capture(1)
End Sub

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    frmMain.Show()
    vidCapture.Dispose()
    Me.Close()
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    imgFrame = vidCapture.QueryFrame().Resize(800, 600, Emgu.CV.CvEnum.INTER.CV_INTER_LINEAR)
    ' PictureBox1.Image.Dispose()
    PictureBox1.Image = imgFrame.ToBitmap()
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Timer1.Stop()
    Timer1.Interval = Timer1.Interval + 2
    RichTextBox1.Text = "Interval:" + Convert.ToString(Timer1.Interval)
    Timer1.Start()
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Timer1.Stop()
    Timer1.Interval = Timer1.Interval - 2
    RichTextBox1.Text = "Interval:" + Convert.ToString(Timer1.Interval)
    Timer1.Start()
End Sub

结束类

尝试按照建议将图像放置在图片框中,最终得到:

System.NullReferenceException:“对象引用未设置为对象的实例。”

在处置的那一刻。

再次感谢吉米!

标签: vb.netwinformsemgucv

解决方案


推荐阅读