image-processing - 如何使用 CPU 而不是 GPU 来处理 CIFilter?

标签 image-processing cpu gpu core-image

有谁知道如何告诉核心图像使用 CPU 而不是 GPU 通过 CIFilter 处理 CIImage?我需要处理一些非常大的图像,并且使用 GPU 得到了奇怪的结果。我不在乎 CPU 需要多长时间。

最佳答案

kCIContextUseSoftwareRenderer 是这里的关键:

+ (CIContext*)coreContextFor:(NSGraphicsContext *)context forceSoftware:(BOOL)forceSoftware
{
    //CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    NSDictionary *contextOptions = [NSDictionary dictionaryWithObjectsAndKeys:
                                    (id)colorSpace, kCIContextWorkingColorSpace,
                                    (id)colorSpace, kCIContextOutputColorSpace,
                                    [NSNumber numberWithBool:forceSoftware], kCIContextUseSoftwareRenderer,
                                    nil];
    CIContext* result = [CIContext contextWithCGContext:(CGContext *)[context graphicsPort] options:contextOptions];
    CGColorSpaceRelease(colorSpace);
    return result;
}

在软件中渲染更多 (CPU) 解决了一些问题,但是......现代机器上的性能损失如此之大,我不能说这是解决方案。我在我的应用程序中使用 CoreImage,我总是在屏幕上使用 GPU 进行渲染,而强制 CPU 仅用于保存。我注意到 CPU 渲染在我的测试硬件上更准确一些,保存过滤后的图像是一个漫长的过程,我可以在这里牺牲速度。

关于image-processing - 如何使用 CPU 而不是 GPU 来处理 CIFilter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898334/

相关文章:

android - 拇指或手指检测机器人

multithreading - 如何在一个处理器内核上执行多个线程

不使用 GPU 的 Tensorflow.js 示例

OpenCV 将 Canny 边缘转换为轮廓

python - 从十六进制颜色代码中找到颜色名称

assembly - MESI 协议(protocol)是否足够,还是仍然需要内存屏障? (英特尔 CPU)

c - 为什么我们甚至需要缓存一致性?

python - 为什么在安装conda之后Tensorflow无法识别我的GPU?

tensorflow - Keras/TF 2019 限制 GPU 内存使用?

c++ - 使用tesseract 3.01的页面布局分析出现的奇怪问题