Рубрики

Обработка изображений на Java | Установите 6 (преобразование цветного изображения в сепию)

Мы настоятельно рекомендуем ссылаться на этот пост ниже.

В этом наборе мы будем преобразовывать цветное изображение в изображение сепии.

В изображении с сепией альфа-компонент изображения будет таким же, как исходное изображение (поскольку альфа-компонент обозначает прозрачность ), но RGB будет изменен, что будет рассчитываться по следующей формуле.

newRed = 0.393*R + 0.769*G + 0.189*B
newGreen = 0.349*R + 0.686*G + 0.168*B
newBlue = 0.272*R + 0.534*G + 0.131*B

If any of these output values is greater than 255, 
simply set it to 255.
These specific values are the values for sepia tone 
that are recommended by Microsoft.

Алгоритм:

  1. Получить значение RGB пикселя.
  2. Рассчитайте newRed, newGree, newBlue с помощью приведенной выше формулы (примите целочисленное значение)
  3. Установите новое значение RGB пикселя согласно следующему условию:
    • Если newRed> 255, то R = 255, иначе R = newRed
    • Если newGreen> 255, то G = 255, иначе G = newGreen
    • Если newBlue> 255, то B = 255, иначе B = newBlue
  4. Замените значения R, G и B новым значением, которое мы рассчитали для пикселя.
  5. Повторите шаги с 1 по 4 для каждого пикселя изображения.

Реализация вышеуказанного алгоритма:

// Java-программа для демонстрации преобразования цвета в сепию

import java.io.File;

import java.io.IOException;

import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;

  

public class Sepia

{

    public static void main(String args[])throws IOException

    {

        BufferedImage img = null;

        File f = null;

  

        // читать изображение

        try

        {

            f = new File("G:\\Inp.jpg");

            img = ImageIO.read(f);

        }

        catch(IOException e)

        {

            System.out.println(e);

        }

  

        // получаем ширину и высоту изображения

        int width = img.getWidth();

        int height = img.getHeight();

  

        // конвертировать в сепию

        for(int y = 0; y < height; y++)

        {

            for(int x = 0; x < width; x++)

            {

                int p = img.getRGB(x,y);

  

                int a = (p>>24)&0xff;

                int R = (p>>16)&0xff;

                int G = (p>>8)&0xff;

                int B = p&0xff;

  

                // вычисляем newRed, newGreen, newBlue

                int newRed = (int)(0.393*R + 0.769*G + 0.189*B);

                int newGreen = (int)(0.349*R + 0.686*G + 0.168*B);

                int newBlue = (int)(0.272*R + 0.534*G + 0.131*B);

  

                // проверка состояния

                if (newRed > 255)

                    R = 255;

                else

                    R = newRed;

  

                if (newGreen > 255)

                    G = 255;

                else

                    G = newGreen;

  

                if (newBlue > 255)

                    B = 255;

                else

                    B = newBlue;

  

                // установить новое значение RGB

                p = (a<<24) | (R<<16) | (G<<8) | B;

  

                img.setRGB(x, y, p);

            }

        }

  

        // написать изображение

        try

        {

            f = new File("G:\\Out.jpg");

            ImageIO.write(img, "jpg", f);

        }

        catch(IOException e)

        {

            System.out.println(e);

        }

    }

}

Примечание . Этот код не будет работать в онлайн-среде IDE, поскольку для него требуется изображение на диске.

Выход:

Inp.jpg


Out.jpg


Эта статья предоставлена Пратиком Агарвалом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Обработка изображений на Java | Установите 6 (преобразование цветного изображения в сепию)

0.00 (0%) 0 votes