Beispiel #1
0
Imagem* ler_imagem(char* nome_arquivo) {
    char P3[3];
    int width;
    int height;
    int max_value;
    int i;
    int j;
    int r, g, b;
    FILE* arquivo;
    Imagem* img;

    arquivo = fopen(nome_arquivo, "r");

    fscanf(arquivo, "%s", P3);
    fscanf(arquivo, "%i %i", &width, &height);
    fscanf(arquivo, "%i", &max_value);

    img = criar_imagem(width, height);

    for (i = 0; i < height; ++i) {
        for (j = 0; j < width; ++j) {
            fscanf(arquivo, "%i %i %i", &r, &g, &b);
            img->pixels[i][j].r = r;
            img->pixels[i][j].g = g;
            img->pixels[i][j].b = b;
        }
    }

    fclose(arquivo);
    return img;
}
Imagem* binarizacao_imagem(Imagem* padrao, int limiar) {
    Imagem* copia = criar_imagem(padrao->width, padrao->height);
    int i;
    int j;
    int esc_C, a=0;

    for (i = 0; i < padrao->height; i++) {
        for (j = 0; j < padrao->width;j++) {
            esc_C = 0;

            esc_C = esc_C + padrao->pixels[i][j].r;
            esc_C = esc_C + padrao->pixels[i][j].g;
            esc_C = esc_C + padrao->pixels[i][j].b;

            esc_C = sat(esc_C/3);
            if(esc_C > limiar){
                a=000;
            }else{
                a=255;
            }

            copia->pixels[i][j].r = a;
            copia->pixels[i][j].g = a;
            copia->pixels[i][j].b = a;
        }
    }

    return copia;
}
Imagem* zoom2x(Imagem* org) {
    int i;
    int j;
    Pixel p, a, b, d, e, c;
    Imagem* nova;

    nova = criar_imagem(org->width * 2, org->height * 2);
    limpar(nova, rgb(255, 255, 255));

    for (i = 0; i < org->height; ++i) {
        for (j = 0; j < org->width; ++j) {
            nova->pixels[i*2][j*2] = org->pixels[i][j];
        }
    }

    for (i = 0; i < org->height; ++i) {
        for (j = 0; j < org->width; ++j) {
            if (j+1 < org->width) {
                a = org->pixels[i][j];
                b = org->pixels[i][j+1];
                p = calculo_media(a, b);
            }

            if (j != 0) {
                nova->pixels[i*2][j*2-1] = p;
            }

            if (i+1 < org->height) {
                a = org->pixels[i][j];
                b = org->pixels[i+1][j];
                p = calculo_media(a, b);
            }

            if (i != 0) {
                nova->pixels[i*2-1][j*2] = p;
            }
        }
    }

    for (i = 0; i < nova->height - 2; i += 2) {
        for (j = 0; j < nova->width - 2; j += 2) {
            a = nova->pixels[i][j+1];
            b = nova->pixels[i+1][j];
            d = nova->pixels[i+1][j+2];
            e = nova->pixels[i+2][j+1];
            c = calculo_media4(&a, &b, &d, &e);
            nova->pixels[i+1][j+1] = c;
        }
    }

    return nova;
}
Imagem* rotacionar90(Imagem* original) {
    int i;
    int j;
    int w = original->width;
    int h = original->height;

    Imagem* nova = criar_imagem(h, w);

    for (i = 0; i < h; ++i) {
        for (j = 0; j < w; ++j) {
            nova->pixels[j][(h - 1) - i] = original->pixels[i][j];
        }
    }

    return nova;
}
Beispiel #5
0
int main() {
    Imagem* img;
    Imagem* cop;
    int i;

    img = ler_imagem("conv.ppm");
    cop = criar_imagem(img->width, img->height);

    for (i = 0; i < 1; ++i) {
        aplicar_filtro_1(cop, img);
        igualar_imagem(img, cop);
    }

    salvar_imagem(cop, "conv_copia.ppm");

    return 0;
}
Imagem* ler_imagem(char* nome_arquivo) {
    char P3[3];
    int width;
    int height;
    int max_value;
    int i;
    int j;
    unsigned char r, g, b;
    FILE* arquivo;
    Imagem* img;

    arquivo = fopen(nome_arquivo, "r");

    fscanf(arquivo, "%s", P3);
    fscanf(arquivo, "%i %i", &width, &height);
    fscanf(arquivo, "%i", &max_value);
    img = criar_imagem(width, height);

    if (P3[1] == '3') {
        for (i = 0; i < height; ++i) {
            for (j = 0; j < width; ++j) {
                fscanf(arquivo, "%i %i %i", &r, &g, &b);
                img->pixels[i][j].r = r;
                img->pixels[i][j].g = g;
                img->pixels[i][j].b = b;
            }
        }
    } else if (P3[1] == '6') {
        fscanf(arquivo, "%c", &r);
        for (i = 0; i < height; ++i) {
            for (j = 0; j < width; ++j) {
                fscanf(arquivo, "%c%c%c", &r, &g, &b);
                img->pixels[i][j].r = (unsigned int) r;
                img->pixels[i][j].g = (unsigned int) g;
                img->pixels[i][j].b = (unsigned int) b;
            }
        }
    } else {
        printf("Erro: formato de imagem desconhecida\n");
        return NULL;
    }

    fclose(arquivo);
    return img;
}
Imagem* reduzir2x(Imagem* org) {
    int i;
    int j;
    Pixel p, a, b, d, e, c;
    Imagem* nova;

    nova = criar_imagem(org->width / 2, org->height / 2);
    limpar(nova, rgb(255, 255, 255));

    for (i = 0; i < org->height - 2; i += 2) {
        for (j = 0; j < org->width - 2; j += 2) {
            a = org->pixels[i][j];
            b = org->pixels[i][j+1];
            c = org->pixels[i+1][j];
            d = org->pixels[i+1][j+1];
            p = calculo_media4(&a, &b, &c, &d);
            nova->pixels[i/2][j/2] = p;
        }
    }

    return nova;
}
Imagem* gaussianblur(Imagem* original) {
    Imagem* modificada = criar_imagem(original->width, original->height);
    int width;
    int height;
    int i;
    int j;
    int k;
    int m;
    int r;
    int g;
    int b;
    int acc;

    height = original->height;
    width = original->width;

    for (i = 1; i < height - 1; ++i) {
        for (j = 1; j < width - 1; ++j) {
            calculo_gaussianblur(modificada, original, i, j);
        }
    }

    return modificada;
}