如何使用iOS GPUImage生成直方图?
在https://github.com/luisespinoza/LolorPicker项目上工作,我想使用项目GPUImage(https://github.com/BradLarson/GPUImage)从任意inputUIImage生成直方图UIImage。
我正在使用的当前代码如下所示:
- (NSDictionary*)dictionaryWithColorsPickedFromImage:(UIImage *)image { GPUImageFilter *filter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramRGB]; UIImage *filteredImage = [filter imageByFilteringImage:image]; [UIImagePNGRepresentation(filteredImage) writeToFile:@"/Users/Luis/histogram.png" atomically:YES]; return nil; }
问题是,histogram.png导致每个input图像只有一条黑线。
那么,如何使用iOS GPUImage生成直方图UIImage?
你可以看一下FilterShowcase的例子,看看在实际中这是如何工作的。
GPUImageHistogramFilter获取图像并输出一个256×3的图像,对直方图进行编码(由于帧缓冲区结构中不允许有1个像素的高度,因此高度为3像素)。 R,G和B值被存储在它们各自的颜色通道内,该图像的中心位于1像素高的中央条纹内。
为了可视化这个,你需要使用一个GPUImageHistogramGenerator,并把GPUImageHistogramFilter的输出提供给它。 GPUImageHistogramGenerator将直方图input的可视化表示形成为图像。 您需要使用-forceProcessingAtSize:
设置GPUImageHistogramGenerator的输出图像的大小,因为它默认情况下没有设置大小。
另外一个小心的是,你需要在你的input图像和GPUImageHistogramFilter之间有一个虚拟的filter。 GPUImageHistogramFilter目前依赖于glReadPixels()
,它只适用于渲染的内容,而不是直接上传的图像或video帧。
在FilterShowcase中使用的代码如下所示:
filter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramRGB]; GPUImageGammaFilter *gammaFilter = [[GPUImageGammaFilter alloc] init]; [videoCamera addTarget:gammaFilter]; [gammaFilter addTarget:filter]; GPUImageHistogramGenerator *histogramGraph = [[GPUImageHistogramGenerator alloc] init]; [histogramGraph forceProcessingAtSize:CGSizeMake(256.0, 330.0)]; [filter addTarget:histogramGraph]; GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init]; blendFilter.mix = 0.75; [blendFilter forceProcessingAtSize:CGSizeMake(256.0, 330.0)]; [videoCamera addTarget:blendFilter]; [histogramGraph addTarget:blendFilter]; [blendFilter addTarget:filterView];
这将生成的直方图可视化覆盖在传入的摄像机video之上。
- GPUImage遮罩透明度
- 如何在iOS上用libtiff编写1bpp tiff?
- 初始化The Amazing Audio Engine后,没有录像中的audio(使用GPUImage)
- 如何减lessGPUImageGaussianSelectBlurFilter效果中的内存消耗?
- GPUImage着色器与“错误:一个或多个附加着色器未成功编译”
- 与GPUImage混合:如何控制第一个图像上的第二个图像的位置
- iPhone 4S上的GPUImage Kuwahara滤镜
- ios GPUImage,小image processing效果不好?
- 'GPUImageOutput <GPUImageInput>'没有可见的@interface声明select器'imageFromCurrentlyProcessedOutputWithOrientation:'