Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 是否有更简单的方法从iOS设备捕获字节';谁的照相机?_Objective C_Ios - Fatal编程技术网

Objective c 是否有更简单的方法从iOS设备捕获字节';谁的照相机?

Objective c 是否有更简单的方法从iOS设备捕获字节';谁的照相机?,objective-c,ios,Objective C,Ios,我正在使用iOS 5.1中的OpenCV进行一些图像处理。我有一些库来检测标记和其他东西 我现在需要做的是从相机中获取每一帧视频,这样我就可以使用OpenCV进一步处理它。我发现了一些示例代码,例如,在,但它似乎有不必要的困难。我的意思是,我真的需要写500行代码来捕获帧并将其推回到视图中吗 有人能告诉我从哪里开始吗 //更新 这是我能够编写的最简单的captureOutput:didOutputSampleBuffer:fromConnection:method - (void)capture

我正在使用iOS 5.1中的OpenCV进行一些图像处理。我有一些库来检测标记和其他东西

我现在需要做的是从相机中获取每一帧视频,这样我就可以使用OpenCV进一步处理它。我发现了一些示例代码,例如,在,但它似乎有不必要的困难。我的意思是,我真的需要写500行代码来捕获帧并将其推回到视图中吗

有人能告诉我从哪里开始吗

//更新 这是我能够编写的最简单的captureOutput:didOutputSampleBuffer:fromConnection:method

- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
      fromConnection:(AVCaptureConnection *)connection {
  @autoreleasepool {
      CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
      CVPixelBufferLockBaseAddress(imageBuffer, 0);
      uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer);

      CGRect videoRect = CGRectMake(0.0f, 0.0f, CVPixelBufferGetWidth(imageBuffer), CVPixelBufferGetHeight(imageBuffer));
      cv::Mat mat(videoRect.size.height, videoRect.size.width, CV_8UC1, baseAddress, 0);
      [self processFrame:mat videoRect:videoRect]; //which is to be implemented in subclass - which means it's gonna do something with openCV and then openGL it to view :)
      mat.release();
      CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
  }
}

如果删除注释和空白,甚至不需要50行代码。真的不太麻烦,它完全满足了你的需要。谢谢你的回复,看起来我最终还是要研究它:)坦白地说,当你想到上面链接的代码在做什么时(设置与实时摄像机的连接、配置色彩空间、设置最小帧速率和处理视频帧),这根本不是很多代码。事实上,大部分底部部分都可以删除,因为您只需要将原始图像数据字节传递给OpenCV,因此无需创建完整的UIImage。但是,请注意,由于CPU限制的图像处理例程非常慢,您可能无法实时执行所需的图像处理。谢谢您的回复。我注意到这可能不像我预期的那么容易。我简化了captureOutput:didOutputSampleBuffer:fromConnection:方法,因此不必创建CGImages等等。然后我将它传递给openCV来做一些事情,然后我将不得不使用openGLES来渲染要查看的图像(这可能是实现实时渲染的方法?)。困扰我的是,我仍然必须将CMSampleBufferRef转换为CVImageBufferRef。