使用 c# 和 .net5 从网络摄像头捕获图像

capture images from webcam using c# with .net5

我正在尝试在我的 .net5 项目上制作一个简单的表单来从网络摄像头捕获图像,但是我似乎无法为此找到一个简单的解决方案。我尝试了 AForge、OpenCVSharp.. 它们不支持 .net5,但我得到了一个 运行 的项目,但结果只是空白(没有网络摄像头图像)。我 google 搜索并尝试了几乎所有我能找到的东西。

我想知道是否有人对解决此问题有任何建议,更喜欢开源组件

edit1:我在桌面应用程序中使用 Winforms。

OpenCvSharp4 支持 .NET5(以及 .NET6 预览版:-))。

如何重现

  1. 创建一个空的“Windows Forms App”项目表单 Visual Studio。 (显然不要使用 .NET Framework...)

  2. 添加 nuget 包 OpenCvSharp4.Windows。在我的 csproj 文件下面。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0-windows7.0</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="OpenCvSharp4.Windows" Version="4.5.3.20210817" />
  </ItemGroup>

</Project>
  1. 使用设计器将按钮和图片框添加到 Form1

  2. 复制下面的代码并将其粘贴到 Form1.cs

using OpenCvSharp;
using OpenCvSharp.Extensions;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WebCam
{
    public partial class Form1 : Form
    {
        VideoCapture capture;
        Mat frame;
        Bitmap image;

        public Form1()
        {
            InitializeComponent();

            frame = new Mat();
            capture = new VideoCapture(0);
            capture.Open(0);
        }

        private void button1_Click(object sender, EventArgs e)
        {

            if (capture.IsOpened())
            {
                capture.Read(frame);
                image = BitmapConverter.ToBitmap(frame);
                if (pictureBox1.Image != null)
                {
                    pictureBox1.Image.Dispose();
                }
                pictureBox1.Image = image;
            }
        }
    }
}

就这些了。