我正在使用AVFoundation框架.在我的示例缓冲区委托中,我有以下代码:
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{
CVPixelBufferRef pb = CMSampleBufferGetImageBuffer(sampleBuffer);
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pb];
self.imageView.image = [UIImage imageWithCIImage:ciImage];
}
Run Code Online (Sandbox Code Playgroud)
我可以使用CIImage来运行面部检测器等但它没有出现在UIImageView中...... imageView仍然是白色的.关于这个问题的任何想法?我使用以下设置我的会话:
self.session = [[AVCaptureSession alloc] init];
self.session.sessionPreset = AVCaptureSessionPreset640x480;
self.videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
self.videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:nil];
self.frameOutput = [[AVCaptureVideoDataOutput alloc] init];
self.frameOutput.videoSettings = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey];
Run Code Online (Sandbox Code Playgroud) 我一直在尝试大量不同的选项和技巧,以便从CIImage中正确构建UIImage.但是,每次我创建CIImage时,它的颜色似乎都是倒置的.
我最近的代码是:
NSURL *url = [[NSBundle mainBundle] URLForResource:@"C4Sky" withExtension:@"png"];
CIImage *c = [CIImage imageWithContentsOfURL:url];
UIImage *i = [UIImage imageWithCIImage:c];
UIImageView *uiiv = [[UIImageView alloc] initWithImage:i];
[self.canvas addSubview:uiiv];
Run Code Online (Sandbox Code Playgroud)
产生以下图像:

但是,构建这样的图像:
UIImage *i = [UIImage imageNamed:@"C4Sky"];
UIImageView *uiiv = [[UIImageView alloc] initWithImage:i];
[self.canvas addSubview:uiiv];
Run Code Online (Sandbox Code Playgroud)
...产生以下图像:

我尝试了很多不同的构建CIImage的方法.
这是否发生是因为iOS中CIImage的像素格式是ARGB?(看来这是iOS6上唯一可能的格式)
如果是这样,我如何交换像素格式让这个CIImage看起来正常?
我已经在git上创建了一个项目回购,显示了我尝试的所有主要不同方式(不包括每个方面的变体).有6种方法,前5种方法失败:
https://github.com/C4Code/CIImageTest
最后一种方法有效,但它真的很脏:
-(void)test6 {
UIImage *img = [UIImage imageNamed:@"C4Sky"];
CGContextRef bitmapContext = NULL;
void * bitmapData;
int bitmapByteCount;
int bitmapBytesPerRow;
CGSize size = img.size;
bitmapBytesPerRow = (size.width …Run Code Online (Sandbox Code Playgroud) 举例来说,我在桌子上放了一张名片,我只想将名片扫描出来。类似于二维码扫描仪,我想将名片图像扫描到应用程序中。
我听说过 OpenCV,但不确定如何在 swift 3 中使用它。有什么建议可以指导我朝着正确的方向发展?