相关疑难解决方法(0)

iOS白点/白平衡调整示例/建议

我试图以编程方式更改白点/白平衡.这就是我想要完成的任务:
- 从图像中选择一个(随机)像素
- 获取该像素的颜色
- 转换图像,使该颜色的所有像素都转换为白色,并移动所有其他颜色以匹配

我已经完成了前两个步骤,但第三步并没有真正解决.

起初我认为,根据Apples的文档,CIWhitePointAdjust应该是完全可以完成的事情,但是,尽管它确实改变了图像,但它没有做我想要/希望它做的事情.

然后似乎CIColorMatrix应该能够帮助我改变颜色,但是我(现在仍然)却厌倦了用那些讨厌的向量输入它的东西.我已经尝试了几乎所有的东西(所有矢量上的相同RGB值,每个矢量上的相应值(R代表R等),1 - 对应值,1 +对应值,1 /对应值.RGB值和不同(1 - x ,1 + x,1/x).

我也遇到了CITemperatureAndTint,根据Apples文档也应该有所帮助,但我还没有弄清楚如何从RGB转换为温度和色调.我已经看到了关于从RGB转换到Temperatur的算法和公式,但没有关于色调的内容.我会继续尝试这一点.

任何帮助非常感谢!

objective-c core-image ios

4
推荐指数
1
解决办法
2542
查看次数

iOS Accelerate Framework vImage - 性能改进?

我一直在使用OpenCV和Apple的Accelerate框架,发现Accelerate的性能很慢,Apple的文档有限.我们举个例子:

void equalizeHistogram(const cv::Mat &planar8Image, cv::Mat &equalizedImage)
{
    cv::Size size = planar8Image.size();
    vImage_Buffer planarImageBuffer = {
        .width = static_cast<vImagePixelCount>(size.width),
        .height = static_cast<vImagePixelCount>(size.height),
        .rowBytes = planar8Image.step,
        .data = planar8Image.data
    };

    vImage_Buffer equalizedImageBuffer = {
        .width = static_cast<vImagePixelCount>(size.width),
        .height = static_cast<vImagePixelCount>(size.height),
        .rowBytes = equalizedImage.step,
        .data = equalizedImage.data
    };

    TIME_START(VIMAGE_EQUALIZE_HISTOGRAM);
    vImage_Error error = vImageEqualization_Planar8(&planarImageBuffer, &equalizedImageBuffer, kvImageNoFlags);
    TIME_END(VIMAGE_EQUALIZE_HISTOGRAM);
    if (error != kvImageNoError) {
        NSLog(@"%s, vImage error %zd", __PRETTY_FUNCTION__, error);
    }
}
Run Code Online (Sandbox Code Playgroud)

此调用大约需要20ms.这具有在我的应用程序中无法使用的实际意义.也许直方图的均衡本质上很慢,但我也测试了BGRA->灰度,发现OpenCV可以在~5ms内完成,vImage需要~20ms.

在测试其他功能时,我发现了一个项目,项目创建了一个带有模糊功能(gist)的简单滑块应用程序,我将其清理干净以进行测试.大约~20ms.

是否有一些技巧可以让这些功能更快?

opencv ios accelerate-framework vimage

4
推荐指数
3
解决办法
2107
查看次数