从CaptureElement&amp ;;执行实时视频流处理MediaCapture

时间:2012-10-11 09:06:41

标签: c# video windows-8 windows-runtime video-processing

在我的Windows 8商店应用程序中,我倾向于执行实时视频流处理(例如,面部检测)。


技术1

在我之前的Windows 7应用程序中,我能够使用以下技术(Camera Face Detection in C# Using Emgu CV (OpenCV in .NET) and WPF)来执行实时视频处理。该技术是具有固定周期定时器回调,以主动查询来自相机对象的图像缓冲区

void timer_Tick(object sender, EventArgs e)
{
    Image<Bgr,Byte> currentFrame = capture.QueryFrame();
    // Perform image processing based on currentFrame

技术2

我之前在Android中使用的另一种技术是,我将在相机上安装相机缓冲预览回调。 摄像机会定期通过传输捕获的摄像头缓冲区来触发回调。从那里,我可以进行图像处理。

public abstract void onPreviewFrame (byte[] data, Camera camera)
{
    // Perform image processing based on data

然而,在讨论 Windows 8商店应用程序的视频处理的文章中,他们大多使用内置处理功能

他们都没有演示如何访问原始相机捕获的缓冲区,逐像素地迭代缓冲区。

我认为我需要根据

使用CaptureElement & MediaCapture

http://blog.xyzzer.me/2012/01/22/displaying-webcam-preview-in-a-metro-app-using-winrt-and-xaml/

  

如果您只想查看网络摄像头输入或此方法,此方法很棒   将其捕获到一个没有麻烦的文件。如果要处理视频   实时或覆盖其他一些UI组件 - 输入...

     

CaptureElement&amp; MediaCapture方式

但是,之后作者没有详细说明。 (我希望他这样做:)。

任何提示如何从CaptureElement&amp; amp;执行实时视频流处理MediaCapture?

1 个答案:

答案 0 :(得分:3)

你可以先尝试的是MediaCapture.CapturePhotoToStreamAsync,我认为这也只是压缩照片的场景,但你可以很快将其解码回WriteableBitmap并对其像素进行一些处理。你可能不会以这种方式每秒处理太多帧。

更好的方法可能是使用MediaCapture.AddEffectAsync()并在C ++中编写一个Media Foundation Transform(MFT)来处理视频,并以某种方式将结果传回给应用程序。