1厨相、最后獲得的圖像反向轉(zhuǎn)換
int height = CVPixelBufferGetHeight(pixelBuffer);
CGAffineTransform transform = CGAffineTransformMakeScale(1, -1);
transform = CGAffineTransformTranslate(transform, 0, -1 * height);
/* Do your face detection */
CGRect faceRect = CGRectApplyAffineTransform(feature.bounds, transform);
CGPoint mouthPoint = CGPointApplyAffineTransform(feature.mouthPosition, transform);
2隧魄、如果圖像一開始就不是正向的
/**
* 問題來(lái)自 UIImage 的取向和 CIDetectorImageOrientation 之間的區(qū)別。從 iOS 的文檔:
CIDetectorImageOrientation
要檢測(cè)密鑰被用來(lái)指定圖像的顯示方向的功能酒甸。此密鑰是一個(gè) NSNumber 對(duì)象具有相同的值定義的 TIFF 和 EXIF 規(guī)格 怨咪;值的范圍可以從 1 到 8拭荤。值指定原點(diǎn) (0,0) 的圖像所在的位置震叮。如果不存在胧砰,默認(rèn)值是 1,這意味著圖像的原點(diǎn)是左上角苇瓣。每個(gè)值所指定的圖像來(lái)源的詳細(xì)信息尉间,請(qǐng)參閱 kCGImagePropertyOrientation。
可用在 iOS 5.0 和更高版本击罪。
在 CIDetector.h 中聲明哲嘲。
所以現(xiàn)在的問題是這些兩個(gè)方向之間的轉(zhuǎn)換,在這里是我的代碼中的所作所為媳禁、 我測(cè)試和它為所有方向工作:
*
*/
int exifOrientation;
switch (image.imageOrientation) {
case UIImageOrientationUp: {
exifOrientation = 1;
break;
}
case UIImageOrientationDown: {
exifOrientation = 3;
break;
}
case UIImageOrientationLeft: {
exifOrientation = 8;
break;
}
case UIImageOrientationRight: {
exifOrientation = 6;
break;
}
case UIImageOrientationUpMirrored: {
exifOrientation = 2;
break;
}
case UIImageOrientationDownMirrored: {
exifOrientation = 4;
break;
}
case UIImageOrientationLeftMirrored: {
exifOrientation = 5;
break;
}
case UIImageOrientationRightMirrored: {
exifOrientation = 7;
break;
}
}
NSDictionary *detectorOptions = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh };
// TODO: read doc for more tuneups
CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:detectorOptions];
NSArray *features = [faceDetector featuresInImage:[CIImage imageWithCGImage:image.CGImage]
options:@{CIDetectorImageOrientation:[NSNumber
numberWithInt:exifOrientation]}];