Modo de mesclagem de camadas (3)

modo de diferença

        Modo de diferença: visualize o valor de cada canal, subtraia a cor de mesclagem da cor base ou subtraia a cor base da cor de mesclagem. Depende de qual canal possui o maior valor entre a cor de mesclagem e a cor base. Quando o branco é misturado com qualquer cor, obtém-se a cor oposta, e quando o preto é misturado com qualquer cor, a cor permanece inalterada.
Fórmula de cálculo: cor do resultado = valor absoluto (cor mista - cor base).

void layerblend_difference(Mat &base,Mat &blend,Mat &dst)
{
    if (base.rows != blend.rows ||
        base.cols != blend.cols ||
        base.type() != blend.type())
        return;

    dst = Mat::zeros(base.rows,base.cols,base.type());

    for (int h = 0;h < base.rows;h ++)
    {
        uchar *d1 = base.ptr<uchar>(h);
        uchar *d2 = blend.ptr<uchar>(h);
        uchar *d3 = dst.ptr<uchar>(h);
        for (int w = 0;w < base.cols;w ++)
        {
            int cw = w * base.channels();
            for (int c = 0;c < base.channels();c ++){
                int res = 0;

                res = abs(d2[cw + c] - d1[cw + c]);

                d3[cw + c] = saturate_cast<uchar>(res);
            }
        }
    }
}

excluir padrão

        O modo de exclusão é um modo de mesclagem muito semelhante ao modo de diferença, exceto que o contraste de cor do resultado do modo de exclusão não é tão forte quanto o modo de diferença. O branco é misturado com a cor base para obter o complemento da cor base, e o preto é misturado com a cor base para obter a cor base.
Fórmula de cálculo: cor resultante = (cor mista + cor base) - cor mista * cor base / 128.

void layerblend_exclude(Mat &base,Mat &blend,Mat &dst)
{
    if (base.rows != blend.rows ||
        base.cols != blend.cols ||
        base.type() != blend.type())
        return;

    dst = Mat::zeros(base.rows,base.cols,base.type());

    for (int h = 0;h < base.rows;h ++)
    {
        uchar *d1 = base.ptr<uchar>(h);
        uchar *d2 = blend.ptr<uchar>(h);
        uchar *d3 = dst.ptr<uchar>(h);
        for (int w = 0;w < base.cols;w ++)
        {
            int cw = w * base.channels();
            for (int c = 0;c < base.channels();c ++){
                int res = 0;

                res = (d2[cw + c] + d1[cw + c]) - d2[cw + c] * d1[cw + c] / 128.0f;

                d3[cw + c] = saturate_cast<uchar>(res);
            }
        }
    }
}

padrão de subtração

        Modo de subtração: visualize as informações de cor de cada canal e subtraia a cor mesclada da cor base. Se um número negativo aparecer, ele será reduzido a zero; cores iguais à cor base serão misturadas para obter o preto; o branco será misturado com a cor base para obter o preto; o preto será misturado com a cor base para obter a cor base. .
Fórmula de cálculo:
Cor Resultado = Cor Base - Cor Mista.

modo de partição

        Visualize as informações de cores de cada canal e divida a cor mesclada pela cor base. Se o valor da cor base for maior ou igual ao valor da cor mista, a cor misturada será branca. A cor base é numericamente menor que a cor de mesclagem e a cor resultante é mais escura que a cor base. O contraste de cores resultante é, portanto, muito forte. O branco é misturado com a cor base para obter a cor base, e o preto é misturado com a cor base para obter o branco.
Fórmula de cálculo:
Cor do resultado = (cor base/cor mista) * 255.

Modo matiz

        Modo de mesclagem de matiz: a cor resultante retém o matiz da cor misturada e os valores de saturação e luminosidade mantêm os valores de luminosidade. O matiz, a saturação e o brilho usados ​​aqui também são um modo de cor, também chamado de modo HSB. Matiz representa a aparência de uma cor, que é o vermelho, verde, azul, etc. que vemos; saturação é o grau de saturação da cor, ou seja, a vivacidade; valor é a claridade ou escuridão da cor. Dentre eles, preto, cinza e branco não possuem cor e saturação, ou seja, o valor relevante é 0.

Modo de saturação

        O modo Saturação cria uma cor resultante usando a saturação da cor de mesclagem e o matiz e o valor da cor base. Todos sabemos que a saturação controla apenas o brilho de uma cor, portanto, as cores misturadas apenas alteram o brilho da imagem e não podem afetar a cor. Exceto preto, branco e cinza, como a saturação dessas cores é 0, elas só podem produzir um efeito cinza após a mistura.

modo de cor

        Os modos de cores usam matiz, saturação e luminosidade de uma cor base para criar uma cor resultante. Neste modo, a cor misturada controla a cor de toda a imagem. É um excelente modo para colorir imagens em preto e branco, pois este modo manterá o brilho da imagem colorida base, ou seja, a imagem em preto e branco. Preto e branco produzirão o mesmo efeito cinza quando misturados com a cor base, porque o matiz e a saturação dessas três cores são todos 0.

Modo de luminância

        O modo de mesclagem de valores usa o valor da cor mesclada e o matiz e a saturação da cor base para criar a cor resultante. É exatamente o oposto do modo de cor, portanto, a imagem de cores misturadas só pode afetar a claridade e a escuridão da imagem, mas não pode afetar a cor da cor base, exceto preto, branco e cinza. O preto é misturado com a cor base para obter o preto; o branco é misturado com a cor base para obter o branco; o cinza é misturado com a cor base para obter cores básicas com diferentes cores claras e escuras.

Fórmula de remoção de cor

        Metade da soma dos valores RGB máximo e mínimo de cada pixel é exibida como valor final.

Acho que você gosta

Origin blog.csdn.net/hulinhulin/article/details/133312414
Recomendado
Clasificación