Link

首页

Tweet

书单

about me

Command

Category

图像滤镜之黑白图


屏幕快照 2016-02-29 下午10.25.50.png

上图就是通过shader处理后的黑白图像,对于图像滤镜算法,其中灰度图,底片效果和黑白图算法最为简单。你可以理解为使用加减法就可以完成的图像滤镜算法。

对于黑白图,它的算法在灰度图的基础之上,同时,理解起来也非常简单。通过两步计算得到黑白图。

  1. 通过RGB计算,得到灰度值
  2. 通过灰度值与阈值的比较,从而判定,当前像素点颜色为纯黑(0,0,0)或者纯白(2555,255,255)

上面图像的代码如下(基于Love2D):

function love.load()
    image = love.graphics.newImage("img.jpg")

    myShader = love.graphics.newShader[[
    vec4 effect( vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords ){
        vec4 pixel = Texel(texture, texture_coords );
        number average = (pixel.r+pixel.b+pixel.g)/3.0;
        number th = 0.5;
        if(average<=th)
        {
            pixel.r = 0;
            pixel.g = 0;
            pixel.b = 0;
        }
    else
        {
            pixel.r = 1;
            pixel.g = 1;
            pixel.b = 1;
    }
        
        return pixel;
    }
  ]]
end

function love.draw()
    love.graphics.setShader(myShader)
    love.graphics.draw(image)
    love.graphics.setShader()
end

注意,我将阈值(th变量)设置为0.5,你也可以修改其中的阈值来对图像种黑色范围进行调整。通过计算得到RGB颜色值的平均值,然后与th进行判断,小于阈值则设置为0,黑色。大于阈值,则设置为1,白色。

最后我们来看一下原始图片。

2392160792.png