Я пытаюсь преобразовать CMSampleBufferRef (как часть AVCaptureVideoDataOutputSampleBufferDelegate в iOS) в Matrix OpenCV, чтобы стабилизировать вывод в полуреальном режиме.Преобразование CMSampleBufferRef в cv :: Mat
Я запускаю тестовое приложение в момент, следующий за this, но продолжаю получать проблемы, когда создаю и использую Mat.
Swift контроллер
let wrapper : OpenCVWrapper = OpenCVWrapper()
...
func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
self.wrapper.processBuffer(sampleBuffer, self.previewMat)
}
OpenCVWrapper
- (void)processBuffer:(CMSampleBufferRef)buffer :(UIImageView*)previewMat {
// Convert current buffer to Mat
CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(buffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
CGFloat bufferWidth = CVPixelBufferGetWidth(pixelBuffer);
CGFloat bufferHeight = CVPixelBufferGetHeight(pixelBuffer);
unsigned char *pixel = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer);
Mat tmp(bufferWidth, bufferHeight, CV_8UC4, pixel);
Mat cur = tmp.clone();
dispatch_async(dispatch_get_main_queue(), ^{
[previewMat setImage:[UIImage imageWithCVMat:cur]];
});
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
}
В Mat cur = tmp.clone()
я получаю EXC_BAD_ACCESS
Любые мысли о том, что я делаю неправильно здесь?
Я пробовал bufferWidth и CGFloat и int и переключил их в конструкторе для Mat, то же самое.
Вы пробовали: Mat tmp = Mat (bufferHeight, bufferWidth, CV_8UC4, pixel); Mat cur = tmp.clone(); – freshking
Да, это тоже не сработало. Я закончил преобразование буфера в UIImage, а затем UIImage в Mat. Это сработало, но не ответило, так как оно не отвечает на вопрос. –