相关疑难解决方法(0)

如何直接在IOS 4中旋转CVImageBuffer图像而不转换为UIImage?

我在iPhone上使用OpenCV 2.2来检测面部.我正在使用IOS 4的AVCaptureSession来访问摄像机流,如下面的代码所示.

我的挑战是视频帧以CVBufferRef(指向CVImageBuffer)对象的形式出现,它们以480px宽,300px高的方式呈现为风景.如果您将手机侧向握住,这很好,但是当手机处于直立位置时,我想将这些框架顺时针旋转90度,以便OpenCV可以正确找到面部.

可以将CVBufferRef转换为CGImage,然后转换为UIImage,然后旋转,就像这个人正在做的那样:旋转从视频帧中获取的CGImage

然而,这浪费了很多CPU.我正在寻找一种更快速旋转图像的方法,如果可能的话,理想情况下使用GPU进行处理.

有任何想法吗?

伊恩

代码示例:

 -(void) startCameraCapture {
  // Start up the face detector

  faceDetector = [[FaceDetector alloc] initWithCascade:@"haarcascade_frontalface_alt2" withFileExtension:@"xml"];

  // Create the AVCapture Session
  session = [[AVCaptureSession alloc] init];

  // create a preview layer to show the output from the camera
  AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:session];
  previewLayer.frame = previewView.frame;
  previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

  [previewView.layer addSublayer:previewLayer];

  // Get the default camera device
  AVCaptureDevice* camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

  // Create a AVCaptureInput with the camera …
Run Code Online (Sandbox Code Playgroud)

opencv affinetransform ios

11
推荐指数
2
解决办法
2万
查看次数

旋转视频而不旋转AVCaptureConnection并在AVAssetWriter会话中间

我正在使用PBJVision来实现点击录制视频功能.图书馆不支持方向,所以我正在尝试设计它.从我看到的,旋转视频有三种方法 - 我需要帮助决定最佳前进方式以及如何实现它.请注意,可以在点击到记录段之间进行轮换.因此,在录制会话中,方向被锁定为用户点击按钮时的方向.下次用户点击按钮进行录制时,应将方向重新设置为设备的方向(因此生成的视频显示为正面朝上).

这些方法也在GitHub问题页面中列出

方法1 旋转AVCaptureConnection使用setVideoOrientation:- 这会导致视频预览在每次切换时闪烁,因为这会切换实际的硬件.不酷,不可接受.

方法2transformAVAssetWriterInput用于编写视频的对象上 设置属性.问题是,一旦资产编写者开始编写,该transform属性就无法更改,因此这仅适用于视频的第一部分.

方法3使用以下内容 旋转附加的图像缓冲区:如何直接在IOS 4中旋转CVImageBuffer图像而不转换为UIImage?但它一直在崩溃,我甚至不确定我是不是正在吠叫正确的树.有一个异常被抛出,我无法真正追溯到比我vImageRotate90_ARGB8888错误地使用该函数的事实.

关于我上面链接的GitHub问题页面的解释稍微详细一些.任何建议都会受到欢迎 - 说实话,我在AVFoundation上并不是很有经验,所以我希望有一些神奇的方法可以做到这一点,我甚至不知道!

video objective-c avfoundation ios avassetwriter

8
推荐指数
1
解决办法
5038
查看次数