c# – 如何显示使用Emgu捕获的网络摄像头图像?

前端之家收集整理的这篇文章主要介绍了c# – 如何显示使用Emgu捕获的网络摄像头图像?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在使用一个使用面部识别的项目.
因此,我需要一种方式来向用户显示网络摄像头图像,以便他可以调整自己的脸部.

我一直在尝试使用尽可能少的cpu从网络摄像头获取图像的很多东西:

> VideoRendererElement
> WPFMediaKit
> DirectShow-Lib

但没有一个是好的…任何一种方式太慢或太cpu资源消耗.

然后我尝试了Emgu library,我感觉很好.
起初,我在一个Windows窗体项目中尝试过,并在图片框中更新图像.
但是,当我尝试将其整合到我的WPF项目中时,我陷入了如何将我的图像传递给我的图像控件.

现在我有以下源代码

<Window x:Class="HA.FacialRecognition.Enroll.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Width="800" Height="600"
        Loaded="Window_Loaded" Closing="Window_Closing">
    <Grid>
        <Image x:Name="webcam" Width="640" Height="480" >
            <Image.Clip>
                <EllipseGeometry  RadiusX="240" RadiusY="240">
                    <EllipseGeometry.Center>
                        <Point X="320" Y="240" />
                    </EllipseGeometry.Center>
                </EllipseGeometry>
            </Image.Clip>
        </Image>
    </Grid>
</Window>

代码背后:

private Capture capture;
private System.Timers.Timer timer;

public Window1()
{
    InitializeComponent();
}

private void Window_Loaded(object sender,RoutedEventArgs e)
{
    capture = new Capture();
    capture.FlipHorizontal = true;

    timer = new System.Timers.Timer();
    timer.Interval = 15;
    timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
    timer.Start();
}

void timer_Elapsed(object sender,ElapsedEventArgs e)
{
    using (Image<Bgr,byte> frame = capture.QueryFrame())
    {
        if (frame != null)
        {
            var bmp = frame.Bitmap;
            // How do I pass this bitmap to my Image control called "webcam"?
        }
    }
}

private void Window_Closing(object sender,CancelEventArgs e)
{
    if (capture != null)
    {
        capture.Dispose();
    }
}

我的猜测是使用BitmapSource / WriteableBitmap,但我没有让他们工作…

谢谢!

解决方法

Image Class有一个您可能正在寻找的UriSource属性

猜你在找的C#相关文章