2

我正在使用 openCV 进行一些实时视频处理。事实上,在进行处理时屏幕有点不稳定。我想做的仍然是像往常一样通过 CvVideoCameraDelegate 方法处理图像,但只向用户显示捕获会话视频输出,这应该不那么不稳定。

我在委托回调方法中完成所有视频处理

- (void)processImage:(Mat&)image;

因此,当我加载视图时,我会尝试对其进行设置,以便捕获会话是正在输出的内容。看起来您可以像这样访问 CVVideoCamera 的捕获会话:

AVCaptureSession *session = videoCamera.captureSession;

那么,我的布局文件中有一个视图,我想将它连接到名为 baseView 的视图。我尝试这样做:

AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
CGRect screenRect = baseView.bounds;
previewLayer.frame = screenRect; // Assume you want the preview layer to fill the view.
[baseView.layer addSublayer:previewLayer];

但是,这不起作用。只是一个纯白的屏幕。我可以看出,视频处理仍在后台进行,但无论如何都没有输出视频。

编辑:请注意,我不只是设置了一个额外的捕获会话来执行此操作,因为我试图限制 CPU 任务

4

1 回答 1

1

好的,我想通了:

我试着输入

BOOL loaded = videoCamera.captureSessionLoaded;

事实证明,相机没有完全加载。事实上,在您开始捕获之前它不会完全加载(显然我猜?)

所以只要我把我的代码放在下面

[self.videoCamera start];

一切似乎都按预期工作

于 2012-11-14T21:19:09.993 回答