Tag: 核心图像

如何从CIAreaHistogram中提取主色?

我正在寻找分析iOS上的UIImage(最像素的颜色)最主要的颜色,我偶然发现了核心图像的基于filter的API,特别是CIAreaHistogram。 似乎这个filter可能会帮助我,但我正在努力了解API。 首先它说filter的输出是一个一维图像,它是您的input框的长度和一个像素的高度。 我如何读取这些数据? 我基本上想要找出频率最高的颜色值,所以我期望数据包含每种颜色的某种频率计数,我不清楚这个一维图像是如何表示的,因为它不是真的解释我在这个一维图像内可以预期的数据。 如果它真的是一个直方图,为什么它不会返回一个像字典一样的数据结构 其次,在API中要求多个分档? 这个input应该是什么? 如果我想要一个精确的分析,inputbin参数是我的图像的色彩空间? 什么使仓值更小,我会想象它通过欧几里德距离近似的颜色接近最近的bin。 如果情况是这样,那么不会产生精确的直方图结果,为什么有人想要这样做? 从API的angular度对上述两个问题的任何意见都会对我有很大的帮助

CoreImage / CoreVideo中的内存泄漏

我正在构build一个iOS应用程序,可以进行一些基本检测。 我从AVCaptureVideoDataOutput获取原始帧,将CMSampleBufferRef转换为UIImage,调整UIImage的大小,然后将其转换为CVPixelBufferRef。 至于我可以检测到仪器泄漏是我将CGImage转换为CVPixelBufferRef的最后一部分。 这是我使用的代码: – (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { videof = [[ASMotionDetect alloc] initWithSampleImage:[self resizeSampleBuffer:sampleBuffer]]; // ASMotionDetect is my class for detection and I use videof to calculate the movement } -(UIImage*)resizeSampleBuffer:(CMSampleBufferRef) sampleBuffer { UIImage *img; CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); CVPixelBufferLockBaseAddress(imageBuffer,0); // Lock the image buffer uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddressOfPlane(imageBuffer, 0); // […]

iOS UIImage在通过CIFilter后被旋转

我正在过滤使用相机拍摄的图像。 我通过下面的方法传递从相机中获得的图像。 我有返回的UIImage发送到UIImageView 。 由于某种原因,当它通过这种方法时,图像正在旋转。 我究竟做错了什么? – (UIImage *) applyFilterToImage:(UIImage *)image withFilter:(NSString *)filterName { beginImage = [[[CIImage alloc] initWithImage:image] autorelease]; context = [CIContext contextWithOptions:nil]; filter = [CIFilter filterWithName:@"CISepiaTone" keysAndValues:kCIInputImageKey, beginImage, @"inputIntensity", [NSNumber numberWithFloat:0.8], nil]; outputImage = [filter outputImage]; CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; UIImage *newImg = [UIImage imageWithCGImage:cgimg scale:1.0 orientation:UIImageOrientationUp]; CGImageRelease(cgimg); return scaleAndRotateImage(newImg); […]

“执行昂贵的无压印操作!” – 这是什么,以及如何解决它?

我的核心filtertesting应用程序的debugging控制台显示此消息: CGImageRef 0x7a0e890有行字节填充。 执行代价高昂的无压缩操作! 我无法在标题或Googlesearch中find确切消息(减去指针信息)的命中。 我的问题是(1)这意味着什么?(2)我怎样才能纠正这种情况? 以下是我如何使用CIFilter生成过滤的UIImage的示例。 – (UIImage*)sepia { CIImage *beginImage = [CIImage imageWithCGImage:[self CGImage]]; CIContext *context = [CIContext contextWithOptions:nil]; CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone" keysAndValues: kCIInputImageKey, beginImage, @"inputIntensity", [NSNumber numberWithFloat:0.8], nil]; CIImage *outputImage = [filter outputImage]; CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; UIImage *newImg = [UIImage imageWithCGImage:cgimg]; self = newImg; CGImageRelease(cgimg); return […]

使用转换CIFilters进行CATransition

我正在尝试使用新的iOS 6过渡animation(CIBarsSwipeTransition,CICopyMachineTransition等)的CATransition的filter属性。 CIFilter文档说这些文件在iOS 6上可用,而CATransition文档中没有提到filter属性不能使用。 但是,我似乎无法让他们工作。 我不知道苹果是否没有提到这个function的不可用性,或者我错过了一些东西来使它工作。 以下是我如何设置它: CIFilter *transitionFilter = [CIFilter filterWithName:@"CIBarsSwipeTransition"]; [transitionFilter setDefaults]; CATransition *transition = [CATransition new]; transition.duration = 0.4f; transition.filter = transitionFilter; [self.view.layer addAnimation:transition forKey:kCATransition]; 任何指针赞赏。

以正确的方向保存图像 – Swift&Core Image

我在Swift中使用Core Image来编辑照片,并且在保存照片时遇到问题。 我没有保存正确的方向 。 当我从照片库中获取图片时,我将这个方向保存为UIImageOrientation的variables,但是我不知道如何在将编辑后的照片保存到照片库之前将其设置回来。 任何想法如何? 保存方向: var orientation: UIImageOrientation = .Up orientation = gotImage.imageOrientation 将编辑的照片保存到照片库: @IBAction func savePhoto(sender: UIBarButtonItem) { let originalImageSize = CIImage(image:gotImage) filter.setValue(originalImageSize, forKey: kCIInputImageKey) // 1 let imageToSave = filter.outputImage // 2 let softwareContext = CIContext(options:[kCIContextUseSoftwareRenderer: true]) // 3 let cgimg = softwareContext.createCGImage(imageToSave, fromRect:imageToSave.extent()) // 4 let library = ALAssetsLibrary() library.writeImageToSavedPhotosAlbum(cgimg, […]

如何在UIView的layerClass实例上使用CIFilter?

我的UIView使用TBPaperLayer的实例作为其图层。 +(Class)layerClass { return [TBPaperLayer class]; } 我想创build一个CIFilter来修改这个图层的外观 – 尤其是在它上面应用模糊滤镜。 我怎样才能使用这段代码来模糊这一层的一部分? (代码来自: Blur CALayer的Superlayer ) CALayer *blurLayer = [CALayer layer]; CIFilter *blur = [CIFilter filterWithName:@"CIGaussianBlur"]; [blur setDefaults]; blurLayer.backgroundFilters = [NSArray arrayWithObject:blur]; [self.superlayer addSublayer:blurLayer]; -init没有超级玩家。

iOS – 无法使用CIFilter处理图像

我正在尝试使用Core Image处理图像。 我已经创build了UIImage类别来做到这一点。 我已经添加了QuartzCore和CoreImage框架来投影,导入CoreImage / CoreImage.h并使用这个代码: CIImage *inputImage = self.CIImage; CIFilter *exposureAdjustmentFilter = [CIFilter filterWithName:@"CIExposureAdjust"]; [exposureAdjustmentFilter setDefaults]; [exposureAdjustmentFilter setValue:inputImage forKey:@"inputImage"]; [exposureAdjustmentFilter setValue:[NSNumber numberWithFloat:5.0f] forKey:@"inputEV"]; CIImage *outputImage = [exposureAdjustmentFilter valueForKey:@"outputImage"]; CIContext *myContext = [CIContext contextWithOptions:nil]; return [UIImage imageWithCGImage:[myContext createCGImage:outputImage fromRect:outputImage.extent]]; 但是我得到了来自filter的零输出图像。 我也试着用CIHueAdjust来得到相同的结果。 比你提前 更新 :我find了解决办法。 有必要分配新的CIImage ,而不是像这样通过引用UIImage.CIImage : CIImage *inputImage = [[CIImage alloc] initWithImage:self];

CVPixelBuffer到CIImage总是返回零

我想转换从AVPlayerItemVideoOutput提取到CIImage的pixelBuffer,但总是得到零。 代码 if([videoOutput_ hasNewPixelBufferForItemTime:player_.internalPlayer.currentItem.currentTime]) { CVPixelBufferRef pixelBuffer = [videoOutput_ copyPixelBufferForItemTime:player_.internalPlayer.currentItem.currentTime itemTimeForDisplay:nil]; CIImage *image = [CIImage imageWithCVPixelBuffer:pixelBuffer]; // Always image === nil CIFilter *filter = [FilterCollection filterSepiaForImage:image]; image = filter.outputImage; CIContext *context = [CIContext contextWithOptions:nil]; CGImageRef cgimg = [context createCGImage:image fromRect:[image extent]]; [pipLayer_ setContents:(id)CFBridgingRelease(cgimg)]; } 以下是用于创buildCIImage的pixelBuffer详细信息(总是导致为零): $0 = 0x09b48720 <CVPixelBuffer 0x9b48720 width=624 height=352 bytesPerRow=2496 pixelFormat=BGRA iosurface=0x0 […]

iOS人脸检测器的方向和CIImage方向的设置

编辑发现这个代码,帮助前摄像头图像http://blog.logichigh.com/2008/06/05/uiimage-fix/ 希望其他人也有类似的问题,可以帮助我。 尚未find解决scheme。 (这可能看起来有点长,但只是一堆帮手代码) 我在相机(正面和背面)获取的图像上使用了ios脸部检测器,以及图库中的图像(我正在使用UIImagePicker – 用于通过相机捕捉图像并从图库中select图像 – 不使用漫射用于在Squarecam演示中拍摄照片) 我真的搞砸了检测的坐标(如果有的话),所以我写了一个简短的debugging方法来获取面的边界以及一个实用工具,他们在上面绘制了一个正方形,我想检查检测器的方向正在工作: #define RECTBOX(R) [NSValue valueWithCGRect:R] – (NSArray *)detectFaces:(UIImage *)inputimage { _detector = \[CIDetector detectorOfType:CIDetectorTypeFace context:nil options:\[NSDictionary dictionaryWithObject:CIDetectorAccuracyLow forKey:CIDetectorAccuracy\]\]; NSNumber *orientation = \[NSNumber numberWithInt:\[inputimage imageOrientation\]\]; // i also saw code where they add +1 to the orientation NSDictionary *imageOptions = \[NSDictionary dictionaryWithObject:orientation forKey:CIDetectorImageOrientation\]; CIImage* ciimage = \[CIImage […]