Actualmente estoy trabajando en un proyecto que utiliza Reconocimiento facial. Por lo tanto, necesito una forma de mostrar las imágenes de la cámara web al usuario para que pueda ajustar su rostro.¿Cómo mostrar las imágenes de webcam capturadas con Emgu?
He estado tratando un montón de cosas para obtener imágenes de la cámara web utilizando como menos CPU como sea posible:
Pero ninguno de estaban bien ... De cualquier manera, demasiado lento o consumiendo demasiados recursos de la CPU.
Luego probé el Emgu library y me sentí muy bien al respecto. Al principio, lo probé en un proyecto de Windows Form y estaba actualizando la imagen en un Picture Box. Pero entonces, cuando traté de integrarlo en mi proyecto WPF me quedé atrapado en la forma de pasar mi imagen a mi control de imagen ..
En este momento, no tengo el siguiente código:
<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>
Y el código subyacente:
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();
}
}
Mi suposición era utilizar BitmapSource/WriteableBitmap pero no he tenido que trabajar ...
Gracias!
Sí, pero ¿qué tengo que hacer para que me muestra el "webcam" Control de imagen de la imagen? Lo he intentado: webcam.Source = frame.AsImageSource(); Pero no muestra nada ... – ZogStriP
Configurar el origen debe ser suficiente. ¿Podría intentar especificar un Int32Rect con el tamaño de la imagen? – dahlbyk
¡Tengo el mismo problema! Y maging.CreateBitmapSourceFromHBitmap (image.Bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); causa pérdidas de memoria en WPF! – Evgeny