Modo de fusión de capas (3)

modo de diferencia

        Modo de diferencia: vea el valor de cada canal, reste el color de fusión del color base o reste el color base del color de fusión. Depende de qué canal tenga el valor mayor entre el color de fusión y el color base. Cuando se mezcla blanco con cualquier color, se obtiene el color opuesto, y cuando se mezcla negro con cualquier color, el color permanece sin cambios.
Fórmula de cálculo: color resultante = valor absoluto (color mezclado - color 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 patrón

        El modo de exclusión es un modo de fusión muy similar al modo de diferencia, excepto que el contraste de color del resultado del modo de exclusión no es tan fuerte como el del modo de diferencia. El blanco se mezcla con el color base para obtener el complemento del color base y el negro se mezcla con el color base para obtener el color base.
Fórmula de cálculo: color resultante = (color mezclado + color base) - color mezclado * color 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);
            }
        }
    }
}

patrón de resta

        Modo de resta: vea la información de color de cada canal y reste el color combinado del color base. Si aparece un número negativo, se recorta a cero; los colores que son iguales al color base se mezclan para obtener negro; el blanco se mezcla con el color base para obtener negro; el negro se mezcla con el color base para obtener el color base .
Fórmula de cálculo:
Color de resultado = Color base - Color mezclado.

modo de partición

        Vea la información de color de cada canal y divida el color combinado por el color base. Si el valor del color base es mayor o igual que el valor del color mezclado, el color mezclado es el blanco. El color base es numéricamente más pequeño que el color de fusión y el color resultante es más oscuro que el color base. Por tanto, el contraste de color resultante es muy fuerte. El blanco se mezcla con el color base para obtener el color base y el negro se mezcla con el color base para obtener el blanco.
Fórmula de cálculo:
Color resultante = (color base / color mezclado) * 255.

Modo de tono

        Modo de fusión de tono: el color resultante conserva el tono del color mezclado y los valores de saturación y luminosidad conservan los valores de luminosidad. El tono, la saturación y el brillo utilizados aquí también son un modo de color, también llamado modo HSB. El tono representa la apariencia del color de un color, que es el rojo, verde, azul, etc. que vemos; la saturación es el grado de saturación del color, es decir, la viveza; el valor es la claridad u oscuridad del color. Entre ellos, el negro, el gris y el blanco no tienen color ni saturación, es decir, el valor relevante es 0.

Modo de saturación

        El modo de saturación crea un color resultante utilizando la saturación del color de fusión y el tono y valor del color base. Todos sabemos que la saturación sólo controla el brillo de un color, por lo que los colores mezclados sólo cambian el brillo de la imagen y no pueden afectar el color. A excepción del negro, el blanco y el gris, debido a que la saturación de estos colores es 0, solo pueden producir un efecto gris después de mezclarlos.

Modo de color

        Los modos de color utilizan el tono, la saturación y la luminosidad de un color base para crear un color resultante. En este modo, el color mezclado controla el color de toda la imagen. Es un modo excelente para colorear imágenes en blanco y negro, porque este modo conservará el brillo de la imagen en color base, es decir, la imagen en blanco y negro. El blanco y el negro producirán el mismo efecto gris cuando se mezclen con el color base, porque el tono y la saturación de estos tres colores son todos 0.

Modo de luminancia

        El modo de fusión de valores utiliza el valor del color combinado y el tono y la saturación del color base para crear el color resultante. Es todo lo contrario del modo de color, por lo que la imagen de colores mezclados solo puede afectar la claridad y la oscuridad de la imagen, pero no puede afectar el color del color base, excepto el negro, el blanco y el gris. El negro se mezcla con el color base para obtener negro; el blanco se mezcla con el color base para obtener blanco; el gris se mezcla con el color base para obtener colores base con diferentes colores claros y oscuros.

Fórmula para eliminar el color

        La mitad de la suma de los valores RGB máximo y mínimo de cada píxel se genera como valor final.

Supongo que te gusta

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