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:
¿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:
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
Imagen negativa (invertida)