1

cv :: VideoCaptureを使用してビデオの最後のフレームにアクセスするにはどうすればよいですか?

OpenCVViewController.hの場合:

@interface OpenCVViewController : UIViewController {

    cv::VideoCapture *_videoCapture;
    cv::Mat _lastFrame;

    AVCaptureVideoPreviewLayer *_previewLayer;
    UIView *_videoPreviewView;
}

@property(nonatomic, retain) IBOutlet UIButton *captureButton;
@property(nonatomic, retain) IBOutlet UIView *videoPreviewView;
@property(nonatomic, retain) AVCaptureVideoPreviewLayer *previewLayer;

- (IBAction)capture:(id)sender;

@end

そしてOpenCVViewController.mmでは:

- (void)viewDidLoad {
    [super viewDidLoad];

    _videoCapture = new cv::VideoCapture;
    if (!_videoCapture->open(CV_CAP_AVFOUNDATION)) {
        NSLog(@"Open video camera failed");
    }

    AVCaptureSession *session = [[AVCaptureSession alloc] init];
    session.sessionPreset = AVCaptureSessionPresetHigh;

    CALayer *viewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

    _previewLayer.frame = _videoPreviewView.bounds;
    [_videoPreviewView.layer addSublayer:_previewLayer];
    AVCaptureDevice *device = [AVCaptureDeviceInput defaultDeviceWithMediaType:AVMediaTypeVideo];

    NSError *error = nil;
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
    if (!input) {
        NSLog(@"Error opening camera: %@", error);
    }

    [session addInput:input];
    [session startRunning];

}


- (IBAction)capture:(id)sender {

    _captureButton.enabled = NO;

    if (_videoCapture && _videoCapture->grab()) {
        (*_videoCapture) >> _lastFrame;          //Line is hit
    }
    else {
        NSLog("Failed to grab frame");
    }
}

キャプチャボタンが押されたときに、videoCaptureの最後のフレームを取得し、データを_lastFrameに保存します。上記の方法を使用すると、IBActionでは_lastフレームが空になります。

フレームを取得し、_lastFrameを使用して後で画像を処理する別の方法はありますか?

前もって感謝します!opencv2フレームワークでiOS6を使用する

4

1 に答える 1

0

grab() と retrieve() を組み合わせたVideoCapture::readを使用してみてください。

また、read() と retrieve() の両方が VideoCapture Buffer への参照を返すと思うので、フレームを操作するには cvCloneImage() を使用する必要があります。

于 2013-03-08T21:55:45.500 に答える