【问题标题】:Color overlaying algorithm颜色叠加算法
【发布时间】:2011-11-19 08:19:23
【问题描述】:

我正在寻找一种在现有图片之上叠加颜色的算法。类似于以下应用程序(墙画家)的东西:http://itunes.apple.com/us/app/wall-painter/id396799182?mt=8

我想要一个类似的功能,这样我就可以在现有图片中绘制墙壁并将它们更改为不同的颜色。

我可以在 yuv 或 rgb 模式下工作。

【问题讨论】:

    标签: iphone image image-processing sdk vision


    【解决方案1】:

    您可以尝试使用kCGBlendModeColor 绘制到图形上下文中。来自文档:

    将背景的亮度值与源图像的色调和饱和度值结合使用。此模式保留图像中的灰度级。您可以使用此模式为单色图像着色或为彩色图像着色。

    尝试其他混合模式也可以解决问题。有关详细信息,请参阅文档(搜索“kCGBlendMode”)。

    【讨论】:

    • 我正在叠加 3 张图像并混合它们的颜色。它似乎不起作用。我有一个带有 UIImageView 的 UIView 子类。我实例化了其中的 3 个 UIView 并将它们添加到父视图中。在子类 drawRect 我调用 CGContextSetBlendMode(context, self.blendMode);和 CGContextDrawImage(context, rect, self.imageView.image.CGImage);其中最低视图使用普通混合模式,中间和顶部视图使用乘法。我只显示顶部图像。这些都应该在相同的上下文中呈现吗?我希望能够单独为这些分层图像制作动画,同时保留混合模式。
    • 混合模式仅适用于同一视图。一个视图的drawRect: 方法中的混合模式不会影响它如何与下面的视图混合(alpha 属性会影响)。您必须将三个图像全部绘制到同一个视图中。
    【解决方案2】:

    RGB 和 YUV 颜色模型不太适合以这种方式更改颜色。我认为最好的颜色模型是 HLS。

    链接:RGB to HLS and HLS to RGB conversion source code

    • H(色调)会改变基色
    • L(亮度)会改变亮度
    • S(饱和度)会改变颜色的量

    您可以在照片编辑应用程序中评估这三个组件的效果,例如 The GIMP 的 Photoshop。

    【讨论】:

      【解决方案3】:

      要想成功地画出一幅画中的墙壁,你必须做两个步骤:

      1. 在图片内找到墙的边界(选择图片要上色的部分)

      2. 将所需颜色应用到选定区域

      第一步是困难的部分。它类似于 Photoshop 的魔术棒工具会做的事情。确实,搜索 magic wand algorithm 会发现一些不错的文章,例如带有 Objective-C 代码的 article

      第二步要容易得多,可以通过CGContextSetBlendModeCGContextDrawImage来实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-09
        • 1970-01-01
        • 1970-01-01
        • 2011-12-29
        • 2012-10-14
        • 2018-07-24
        • 2015-09-09
        • 1970-01-01
        相关资源
        最近更新 更多