Attualmente sto lavorando a un progetto che utilizza Riconoscimento facciale. Ho quindi bisogno di un modo per visualizzare le immagini della webcam all'utente in modo che possa regolare il suo viso.Come visualizzare le immagini della webcam catturate con Emgu?
Ho provato un sacco di cose per ottenere immagini dalla webcam utilizzando il meno possibile CPU:
Ma nessuno di loro stavano bene ... In ogni caso, troppo lento o troppo carico di risorse della CPU.
Quindi ho provato il Emgu library e mi sono sentito benissimo. Inizialmente, l'ho provato in un progetto Windows Form e aggiornavo l'immagine in una Picture Box . Ma poi, quando ho cercato di integrarlo nel mio progetto WPF sono rimasto bloccato su come passare la mia immagine al mio controllo Image ..
In questo momento, ho il seguente codice sorgente:
<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>
E il codice dietro:
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();
}
}
la mia ipotesi era quella di utilizzare BitmapSource/WriteableBitmap ma non ho avuto loro lavoro ...
Grazie!
Sì, ma che cosa devo fare per fare visualizzare il mio "webcam" Image Control l'immagine? Ho provato: webcam.Source = frame.AsImageSource(); Ma non visualizza nulla ... – ZogStriP
L'impostazione della sorgente dovrebbe essere sufficiente. Potresti provare a specificare un Int32Rect con le dimensioni dell'immagine? – dahlbyk
Ho lo stesso problema! E maging.CreateBitmapSourceFromHBitmap (image.Bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); causa perdite di memoria in WPF! – Evgeny