在我的Windows 8商店应用程序中,我倾向于执行实时视频流处理(例如人脸检测)。
技术1
在我以前的Windows 7应用程序中,我能够使用以下技术(基于Emgu CV (OpenCV in .NET)和WPF的摄像机人脸检测)执行实时视频处理。该技术是,具有固定周期的计时器回调,主动从相机对象中查询图像缓冲区。
void timer_Tick(object sender, EventArgs e)
{
Image<Bgr,Byte> currentFrame = capture.QueryFrame();
// Perform image processing based on currentFrame技术2
我以前在安卓中使用过的另一种技术是,我将在相机本身上安装一个相机缓冲区预览回调。相机将周期性地触发回调,通过传递捕获的相机缓冲区。从那里,我可以执行图像处理。
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/
这个方法很好,如果您只想看到网络摄像头的输入或捕获它到一个文件,没有麻烦。如果您想实时处理视频或覆盖其他用户界面组件-输入… CaptureElement & MediaCapture方法
然而,在此之后,作者并没有作更详细的阐述。(我希望他这样做:)
有没有提示如何从CaptureElement & MediaCapture执行实时视频流处理?
发布于 2012-10-11 10:02:58
您首先可以尝试的是MediaCapture.CapturePhotoToStreamAsync,我认为这也只是将照片压缩的场景,但您可能很快就可以将其解码回WriteableBitmap,并对其像素进行一些处理。不过,你可能不会以这种方式每秒处理太多帧。
更好的方法可能是使用MediaCapture.AddEffectAsync()并在C++中编写一个媒体基础转换( Media ),该转换将处理视频并以某种方式将结果传递给应用程序。
https://stackoverflow.com/questions/12836017
复制相似问题