WPF .NET Core 3.1 网络摄像头
Webcam for WPF .NET Core 3.1
我在我的网络摄像头项目中尝试了很多依赖项,包括:
但似乎所有这些依赖项都与我的项目不完全兼容。
我当前的项目依赖:
- Microsoft.NETCore.App v3.1
- Microsoft.WindowsDesktop.App.WPF
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 框架)
- OpenCVSharp4(>=.NET Framework 4.6.2,>=.NET Standard 2.0,>=.NET Core 2.1)
- 有关更多信息和包裹,see GitHub and a short tutorial here。
请注意 OpenCVSharp4 包是核心包,根据您的用例,您可以改用 OpenCvSharp4.Windows 和可选的 OpenCvSharp4.WpfExtensions。请参阅 项目页面 GitHub 和 Wiki 了解更多信息。
根据@thatguy 接受的答案分享一下我是如何做到的
首先,将 OpenCvSharp4.Windows
和 OpenCvSharp4.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;
}
}
}
希望这会有所帮助!
我在我的网络摄像头项目中尝试了很多依赖项,包括:
但似乎所有这些依赖项都与我的项目不完全兼容。
我当前的项目依赖:
- Microsoft.NETCore.App v3.1
- Microsoft.WindowsDesktop.App.WPF
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 框架)
- OpenCVSharp4(>=.NET Framework 4.6.2,>=.NET Standard 2.0,>=.NET Core 2.1)
- 有关更多信息和包裹,see GitHub and a short tutorial here。
请注意 OpenCVSharp4 包是核心包,根据您的用例,您可以改用 OpenCvSharp4.Windows 和可选的 OpenCvSharp4.WpfExtensions。请参阅 项目页面 GitHub 和 Wiki 了解更多信息。
根据@thatguy 接受的答案分享一下我是如何做到的
首先,将 OpenCvSharp4.Windows
和 OpenCvSharp4.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;
}
}
}
希望这会有所帮助!