1

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


技术1

在我之前的 Windows 7 应用程序中,我能够使用以下技术(C# 中的相机人脸检测使用 Emgu CV(.NET 中的 OpenCV)和 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 Store Application的视频处理的文章中,他们大多使用内置的处理功能

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

我相信我需要CaptureElement & MediaCapture根据

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

如果您只想查看网络摄像头输入或将其轻松捕获到文件中,此方法非常有用。如果您想实时处理视频或叠加一些其他 UI 组件 - 输入...</p>

CaptureElement 和 MediaCapture 方式

不过,作者在此之后不再详述。(我希望他这样做:)

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

4

1 回答 1

3

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

更好的方法可能是使用 MediaCapture.AddEffectAsync() 并用 C++ 编写一个媒体基础转换 (MFT) 来处理视频并以某种方式将结果传回应用程序。

于 2012-10-11T10:02:58.287 回答