gpt4 book ai didi

iphone - 将 UIImage 转换为黑白而非灰度以使用超正方体

转载 作者:行者123 更新时间:2023-12-03 18:52:17 24 4
gpt4 key购买 nike

我在 iPhone 应用程序中使用 tesseract。

我在图像上尝试了多个过滤器将其转换为灰度图像,但是我希望得到设置阈值的结果,以便图像内的唯一像素是黑色或白色。

我成功地使用了苹果灰度滤镜,它给出了适当的结果。然而它仍然是一个 16 位图像(如果我错了请纠正我)。我目前使用的过滤如下:

- (UIImage *) grayishImage:(UIImage *)i {

// Create a graphic context.
UIGraphicsBeginImageContextWithOptions(i.size, YES, 1.0);
CGRect imageRect = CGRectMake(0, 0, i.size.width, i.size.height);
// Draw the image with the luminosity blend mode.
[i drawInRect:imageRect blendMode:kCGBlendModeLuminosity alpha:1.0];
// Get the resulting image.
UIImage *filteredImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return filteredImage;
}

任何人都可以向我提供过滤器来获得纯黑白像素而不是灰度图像吗?

最佳答案

最快的方法可能是使用 OpenGL ES 2.0 着色器将阈值应用到图像。我的GPUImage框架对此进行了封装,因此您无需担心幕后更多的技术方面。

使用 GPUImage,您可以使用 GPUImageLuminanceThresholdFilter 和如下代码获取 UIImage 的阈值版本:

GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
GPUImageLuminanceThresholdFilter *stillImageFilter = [[GPUImageLuminanceThresholdFilter alloc] init];
stillImageFilter.threshold = 0.5;
[stillImageSource addTarget:stillImageFilter];
[stillImageFilter useNextFrameForImageCapture];
[stillImageSource processImage];

UIImage *imageWithAppliedThreshold = [stillImageFilter imageFromCurrentFramebuffer];

您可以将彩色图像传递到其中,因为这会自动从每个像素中提取亮度并将阈值应用于该像素。高于阈值的任何像素都会变为白色,低于阈值的任何像素都会变为黑色。您可以调整阈值以满足您的特定条件。

但是,对于要传递到 Tesseract 的内容来说,更好的选择是我的 GPUImageAdaptiveThresholdFilter,它的使用方式与 GPUImageLuminanceThresholdFilter 相同,只是没有阈值。自适应阈值处理基于当前像素周围的 9 个像素区域进行阈值处理操作,并根据局部照明条件进行调整。这是专门为帮助 OCR 应用程序而设计的,因此可能是您的最佳选择。

两种类型的滤镜的图像示例可以在 this answer 中找到。 .

请注意,通过 UIImage 的往返速度比处理原始数据慢,因此这些过滤器在作用于直接视频或电影源时要快得多,并且可以针对这些输入实时运行。我还有一个原始像素数据输出,与 Tesseract 一起使用可能会更快。

关于iphone - 将 UIImage 转换为黑白而非灰度以使用超正方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9992078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com