iphone - 如何使用 iOS GPUImage 生成直方图?

标签 iphone ios objective-c gpuimage

正在处理 https://github.com/luisespinoza/LEColorPicker项目中,我正在尝试使用项目 GPUImage(https://github.com/BradLarson/GPUImage)从任意输入 UIImage 生成直方图 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 导致每个输入图像都只有一条黑线。

那么,如何使用 iOS GPUImage 生成直方图 UIImage 的正确代码?

最佳答案

您可以查看 FilterShowcase 示例以了解这在实践中应该如何工作。

GPUImageHistogramFilter 接收图像并输出对直方图进行编码的 256x3 图像(它的高度为 3 像素,因为帧缓冲区构造中不允许 1 像素的高度)。 R、G 和 B 值存储在该图像中心的 1 像素高的中央条纹中各自的颜色 channel 中。

要对此进行可视化,您需要使用 GPUImageHistogramGenerator,并将 GPUImageHistogramFilter 的输出输入其中。 GPUImageHistogramGenerator 将直方图输入创建为图像的视觉表示。您确实需要使用 -forceProcessingAtSize:为 GPUImageHistogramGenerator 的输出图像设置大小,因为默认情况下它没有设置大小。

另一个注意事项是,您需要在输入图像和 GPUImageHistogramFilter 之间设置某种虚拟过滤器。 GPUImageHistogramFilter 当前依赖 glReadPixels()并且仅适用于渲染内容,不适用于直接上传的图像或视频帧。

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];

这会将生成的直方图可视化覆盖在传入的摄像机视频之上。

关于iphone - 如何使用 iOS GPUImage 生成直方图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14391997/

相关文章:

iphone - iOS 中如何检查直线相交?

ios - 开/关声音(IOS)

ios - 以编程方式设置标题

ios - 找不到匹配的配置文件 ios7 xcode5

ios - 文本字段作为搜索栏

iphone - 我调用 deselectRowAtIndexPath 后 AccessoryDe​​tailDisclosureButton 未取消选择

iphone - 如何让 iPhone 应用程序出现在 Spotlight 中,但查询不完全匹配

ios - 时区问题 "ZE8",如何将NSDate转换为NSString

iphone - 本地化 Storyboard时从正确的包中加载图像

ios - viewDidAppear : called when using presentViewController:animated:completion: