用于WPF.NET Core 3.1的网络摄像头



我在我的项目中尝试了很多网络摄像头的依赖项,包括:

  • OpenCVSharp
  • WpfWebcamControl
  • WebcamCapturer.Core

但似乎所有这些依赖项都与我的项目不完全兼容。

我当前的项目依赖项:

  • Microsoft.NETCore.App v3.1
  • Microsoft.Windows桌面.App.WF

WPF .NET Core v3.1是否有任何兼容的网络摄像头依赖项?

这些包与.NET Core 3.1不兼容。

  • WpfWebcamControl(>=.NET Framework 4.6(
  • WebcamCapturer.Core(>=.NET Framework 4.7.2(

对于OpenCV,您可能使用了错误的包,因为它确实与.NET Core 3.1兼容。

  • OpenCVSharp(.NET Framework(
  • OpenCVSharp4(>=.NET Framework 4.6.2,>=.NET Standard 2.0,>=.NET Core 2.1(
  • 有关更多信息和软件包,请参阅GitHub和这里的简短教程

请注意,OpenCVSharp4包是核心包,根据您的使用情况,您可能会使用OpenCVSharp4.Windows和可选的OpenCVSharp4.WpfExtensions。有关详细信息,请参阅项目页面GitHub和Wiki。

根据@thatgoy接受的答案分享我是如何做到的首先,将OpenCvSharp4.WindowsOpenCvSharp4.WpfExtensions安装到wpf.NET Core应用程序中。

然后我把<Image x:Name="image1" Width="400" Height="300" />放在我的xaml文件中并使用WriteableBitmapConverter.ToWriteableBitmap不断更新我的图像

下面是后面的代码

public partial class MainWindow : System.Windows.Window
{
private System.Timers.Timer MyDataTimer;
FrameSource frameSource = Cv2.CreateFrameSource_Camera(0);
public MainWindow()
{
InitializeComponent();
MyDataTimer = new System.Timers.Timer();
MyDataTimer.Elapsed += new ElapsedEventHandler(MyDataTimer_Elapsed);
MyDataTimer.Enabled = true;
MyDataTimer.Interval = 1 * 1;    
MyDataTimer.Start();
}
private void MyDataTimer_Elapsed(object source, ElapsedEventArgs e)
{
try
{
MyDataTimer.Stop();
MyDataTimer.Interval = 1 * 1;
this.Dispatcher.Invoke(new Action(LoadImages));
MyDataTimer.Start();
}
catch (Exception ex)
{
}
finally
{
MyDataTimer.Start();
}
}
private void LoadImages()
{
using (var mat = new Mat())
{
frameSource.NextFrame(mat);
var wb = WriteableBitmapConverter.ToWriteableBitmap(mat);
image1.Source = null;
image1.Source = wb;
}
}
}

希望这会有所帮助!