【问题标题】:No Emgucv ImageBox when using Emgucv with VisualStudio 2019在 VisualStudio 2019 中使用 Emgucv 时没有 Emgucv ImageBox
【发布时间】:2021-03-08 06:52:18
【问题描述】:

通过 NuGet 包管理器安装 Emgucv.runtime.windows 后,我找不到 Emgucv ImageBox。我也尝试在 .NET 框架组件列表中寻找 Emgucv dll 文件作为一种潜在的解决方法,但失败了(通过右键单击通用工具箱下的“选择项目...”找到)。

我正在尝试使用 VB.net 访问我的网络摄像头,并且需要在 Emgucv ImageBox 而不是标准的 .NET 框架 PictureBox 中显示图像帧。

我找不到 Emgucv ImageBox 有什么原因吗?

这是我的代码 sn-p:

Public Class Form1

    Dim imageCapture As Emgu.CV.VideoCapture = New Emgu.CV.VideoCapture
    Dim image_mat As Mat = New Mat
    Dim img As Emgu.CV.Image(Of Bgr, Byte)

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    End Sub

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

        REM things get messy here.... 
        image_mat = Me.imageCapture.QueryFrame
        img = image_mat.ToImage(Of Bgr, Byte)

        REM I want to convert img into a compatible data type for the PictureBox1.Image since I do not have the Emgucv ImageBox

    End Sub
End Class 

【问题讨论】:

  • 您是否向Emgu.CV.Platform.NetFramework.dll 程序集添加了项目引用?在引用中,您是否有 Emgu.CVEmgu.CV.runtime.windows 程序集引用?如果您不这样做,请通过浏览到项目的 \bin\debug 文件夹来添加对前一个程序集的引用。如果您已经拥有这些并且Emgu.CV 选项卡仍未出现在工具箱中,则清理并重建解决方案,重新启动 Visual Studio。
  • 另外,检查 NuGet Package Manager -> Manage NuGet Packages for Solution 是否有 Emgu.CV 包的更新,因为它需要来自 Microsoft 的更新的 System.Drawing.primitives 程序集。

标签: vb.net emgucv


【解决方案1】:

此解决方案是使用 imageBox 工具的替代方案。在 Nuget 包管理器中有一个额外的 Emgu 框架,用于将 Emgu.CV.Mat 数据类型转换为位图 - 它称为 Emgu.CV.Bitmap。

Imports Emgu.CV
Imports Emgu.CV.Structure

Public Class Form1

    Dim imageCapture As Emgu.CV.VideoCapture = New Emgu.CV.VideoCapture
    Dim image_mat As Emgu.CV.Mat = New Emgu.CV.Mat
    Dim img As Emgu.CV.Image(Of Bgr, Byte)

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

        image_mat = Me.imageCapture.QueryFrame
        img = image_mat.ToImage(Of Bgr, Byte)
        PictureBox1.Image = img.ToBitmap REM <---------

    End Sub
End Class 

【讨论】:

  • 你泄露了大量的图形资源。例如,Timer.Tick 处理程序的第一行应该是PictureBox1.Image?.Dispose()。但你应该使用位图字段。
  • 感谢 Jimi 的帮助 - 非常感谢
猜你喜欢
  • 1970-01-01
  • 2012-04-13
  • 2016-07-24
  • 2017-11-16
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多