我想在AVAsset中的每一帧上使用CoreImage运行人脸检测,为此,我需要该资源中每个样本缓冲区的CIDetectorImageOrientation。
问题是,如果我将CMSampleBuffer转换为UIImage,并使用以下命令将该图像转换为exif方向:
var exifOrientation: UInt32 {
switch self.imageOrientation {
case .Up: return 1
case .Down: return 3
case .Left: return 8
case .Right: return 6
case .UpMirrored: return 2
case .DownMirrored: return 4
case .LeftMirrored: return 5
case .RightMirrored: return 7
}
}方向始终是.Up,无论视频是如何拍摄的(前置摄像头还是后置摄像头),也不管视频拍摄的方向是什么。
如何正确获取CMSampleBuffer的CIDetectorImageOrientation
发布于 2016-07-14 04:09:25
您需要获取该资源的视频轨迹的方向。此方向对于每个帧都是相同的。下面是你在Objective C中的大致方法。
AVAssetTrack *videoTrack =[asset tracksWithMediaType:AVMediaTypeVideo].firstObject;
CGSize size = [videoTrack naturalSize];
CGAffineTransform preferredTransform = [videoTrack preferredTransform];
if (size.width == preferredTransform.tx && size.height == preferredTransform.ty) {
return kCGImagePropertyOrientationRight;
} else if (preferredTransform.tx == 0 && preferredTransform.ty == 0) {
return kCGImagePropertyOrientationUpLeft;
} else if (preferredTransform.tx == 0 && preferredTransform.ty == size.width) {
return kCGImagePropertyOrientationDown;
}
...https://stackoverflow.com/questions/37508736
复制相似问题