Рубрики

C программа для инвертирования (создания негатива) содержимого изображения в формате PGM

Дано изображение в формате PGM, и задача состоит в том, чтобы инвертировать цветное изображение (создание негативного) содержимого в формате PGM.
Предварительное условие: c-программа-для-записи-изображения-в-формате pgm

PGM изображение представляет графическое изображение в оттенках серого. PGM — сокращение от Portable Grey Map. Этот файл изображения содержит один или несколько файлов изображений PGM.

Значение блоков данных: данные, которые используются для создания образа PGM, перечислены ниже:

  • P2 — это тип изображения, которое является серым изображением
  • 4 4 — размер изображения
  • 255 — максимальный уровень серого
  • Поскольку данные изображения сохраняются в матричном формате, и каждая строка указывает строку изображения, а значение указывает уровень серого соответствующего пикселя. Максимальное значение (255) используется для белого, а минимальное значение (0) — для черного.

Пример:

P2
4 4
255
255 0   255 0
0   255 0   255
100 200 150 100
50  150 200 0

Входное изображение выглядит так:

Как инвертировать данные изображения?
Инвертировать серое изображение означает изменить уровень серого изображения с помощью (255 — уровень серого), т.е. если уровень серого в пикселе равен 150, то уровень серого в негативном изображении равен (255 — 150) = 105. Это означает, что 255 изменится с 0 и 0 изменится с 255. Это изменение пропорции черного и белого в сером.
Пример:

P2
4 4
255
0   255 0   255
255 0   255 0
155 55  105 155
205  105 55 255

Выходное изображение выглядит так:

#include<stdio.h>
#include<process.h>
#include<stdlib.h>

void main()

    int i, j, temp = 0;

    int width = 4, height = 4;

      

    // Предположим, что 2D Array конвертируется в Image

    // как указано ниже

    int img[10][10] = {

        {255, 0, 255, 0},

        {0, 255, 0, 255},

        {100, 200, 150, 100},

        {50, 150, 200, 0}

    };

      

    // указатель файла для сохранения файла изображения

    FILE *pgmfile, *negative_pgmfile;

  

    // Открываем файл изображения

    pgmfile = fopen("img.pgm", "wb");

      

    // Открыть файл с отрицательным изображением

    negative_pgmfile = fopen("neg_img.pgm", "wb");

      

    fprintf(pgmfile, "P2 \n %d %d \n 255 \n", width, height);

    fprintf(negative_pgmfile, "P2 \n %d %d \n 255 \n", width, height);

      

    // Создаем изображение PGM, используя значение в пикселях

    for(i = 0; i < height; i++) {

        for(j = 0; j < width; j++)

            fprintf(pgmfile, "%d ", img[i][j]);

        fprintf(pgmfile, "\n");

    }

      

    // Создать негативное изображение PGM, используя значение в пикселях

    for(i = 0; i < height; i++) {

        for(j = 0; j < width; j++) 

            fprintf(negative_pgmfile, "%d ", (255 - img[i][j]));

        fprintf(negative_pgmfile, "\n");

    }

      

    fclose(pgmfile);

    fclose(negative_pgmfile);

}

Выход:
Исходное изображение

Негативное (инвертированное) изображение

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

C программа для инвертирования (создания негатива) содержимого изображения в формате PGM

0.00 (0%) 0 votes