Programa en C para invertir (hacer negativo) el contenido de una imagen en formato PGM

Dada una imagen en formato PGM y la tarea es invertir el color de la imagen (haciendo negativo) contenido en formato PGM. 
Requisito previo: c-program-to-write-an-image-in-pgm-format La
imagen PGM representa una imagen gráfica en escala de grises. PGM es la abreviatura de Portable Gray Map. Este archivo de imagen contiene uno o más archivos de imágenes PGM. 
Importancia de los fragmentos de datos: Los datos que se utilizan para crear la imagen PGM se enumeran a continuación: 
 

  • P2 es el tipo de imagen que es imagen gris
  • 4 4 es la dimensión de la imagen
  • 255 es el nivel de gris máximo
  • Dado que los datos de la imagen se almacenan en formato de array y cada fila indica la fila de la imagen y el valor indica el nivel de gris del píxel correspondiente. El valor máximo (255) se usa para el blanco y el valor mínimo (0) para el negro.

Ejemplo: 
 

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

La imagen de entrada se parece a: 
 

pgm image

¿Cómo invertir los datos de la imagen?  
Invertir la imagen gris significa cambiar el nivel de gris de una imagen usando (255 – nivel de gris), es decir, si el nivel de gris de un píxel es 150, entonces el nivel de gris en la imagen negativa es (255 – 150) = 105. Significa que 255 cambiará con 0 y 0 cambiará con 255. Está cambiando la proporción de blanco y negro presente en gris. 
Ejemplo: 
 

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

La imagen de salida se parece a: 
 

invert image

C

#include<stdio.h>
#include<process.h>
#include<stdlib.h>
void main()
{
    int i, j, temp = 0;
    int width = 4, height = 4;
     
    // Suppose the 2D Array to be converted to Image
    // is as given below
    int img[10][10] = {
        {255, 0, 255, 0},
        {0, 255, 0, 255},
        {100, 200, 150, 100},
        {50, 150, 200, 0}
    };
     
    // file pointer to store image file
    FILE *pgmfile, *negative_pgmfile;
 
    // Open an image file
    pgmfile = fopen("img.pgm", "wb");
     
    // Open an negative image file
    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);
     
    // Create PGM image using pixel value
    for(i = 0; i < height; i++) {
        for(j = 0; j < width; j++)
            fprintf(pgmfile, "%d ", img[i][j]);
        fprintf(pgmfile, "\n");
    }
     
    // Create negative PGM image using pixel value
    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);
}

Salida: 
imagen original 
 

pgm image

Imagen negativa (invertida) 
 

invert image

Publicación traducida automáticamente

Artículo escrito por gekcho y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *