Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <fstream>
- #include <locale.h>
- int const MAXX=512,R=0,G=1,B=2;
- using namespace std;
- struct Img{
- int altura;
- int comprimento;
- int matrizimagem[MAXX][MAXX][3]; //struct dos pixels em RGB;
- };
- void insere_nome (char nome[]){
- // ESSA FUNÇÃO VAI SER ÚTIL NA HORA DE ABRIR O ARQUIVO E NA HORA DE SALVAR A IMAGEM ALTERADA
- int tam = strlen(nome);
- while (nome[tam - 4] != '.' || nome[tam - 3]!= 'p' || nome[tam - 2] != 'p' || nome[tam - 1] != 'm')
- {
- cout << "NOME INVALIDO!" << endl;
- cout << "Digite o nome do arquivo(.ppm): ";
- cin >> nome;
- tam = strlen(nome);
- }
- }
- void abre_img(char nome[], Img& img_in){
- // ESSA FUNÇÃO ABRE O ARQUIVO DE IMAGEM PARA SER MODIFICADA NAS FUNÇÕES E AVISA SE A IMAGEM NÃO FOI ENCONTRADA
- ifstream arq(nome);
- char tipo[2];
- int pixels;
- if(!arq.is_open())
- {
- cout << "Erro: arquivo nao encontrado\n";
- exit(0);
- }
- arq >> tipo;
- arq >> img_in.comprimento >> img_in.altura;
- arq >> pixels;
- // ABRE A IMAGEM PIXEL POR PIXEL
- for(int i = 0; i < img_in.altura; i++)
- {
- for(int j = 0; j < img_in.comprimento; j++)
- {
- arq >> img_in.matrizimagem[i][j][R] >> img_in.matrizimagem[i][j][G] >> img_in.matrizimagem[i][j][B];
- }
- }
- arq.close();
- }
- void salva_img(char nome[], Img img)
- {
- char novo[6];
- strcpy(novo, "novo_");
- ofstream arq(strcat(novo,nome));
- arq << "P3" << endl;
- arq << img.comprimento << " " << img.altura << endl;
- arq << 255 << endl;
- for (int i = 0; i < img.altura; i++)
- {
- for (int j = 0; j < img.comprimento; j++)
- {
- arq << img.matrizimagem[i][j][R] << " " << img.matrizimagem[i][j][G] << " " << img.matrizimagem[i][j][B] << " ";
- }
- arq << endl;
- }
- arq.close();
- }
- void binariza_canal(Img img_in, Img& img_out, int limiar){ //img_in vai ser a imagem a ser aberta e o img_out vai ser
- //a que irá sair para a função que salva
- img_out.comprimento=img_in.comprimento;
- img_out.altura=img_in.altura;
- for(int i = 0; i < img_out.comprimento; i++){
- for(int j = 0; j < img_out.altura; j++){
- if(limiar<(img_in.matrizimagem[i][j][R]+img_in.matrizimagem[i][j][G]+img_in.matrizimagem[i][j][B])/3)
- {
- img_out.matrizimagem[i][j][R]=255;
- img_out.matrizimagem[i][j][G]=255;
- img_out.matrizimagem[i][j][B]=255;
- }
- // CASO CONTRARIO CONVERTE-SE O VALOR DE CADA PIXEL PARA 0.
- else
- {
- img_out.matrizimagem[i][j][R]=0;
- img_out.matrizimagem[i][j][G]=0;
- img_out.matrizimagem[i][j][B]=0;
- }
- }
- }
- }
- void rotaciona(Img img_in, Img& img_out){
- img_out.comprimento=img_in.comprimento;
- img_out.altura=img_in.altura;
- for (int i=0; i<img_in.altura; i++){
- int n=img_in.altura-1;
- for (int j=0; j<img_in.comprimento; j++){
- img_out.matrizimagem[i][j][R]=img_in.matrizimagem[n-j][i][R];
- img_out.matrizimagem[i][j][G]=img_in.matrizimagem[n-j][i][G];
- img_out.matrizimagem[i][j][B]=img_in.matrizimagem[n-j][i][B];
- }
- }
- }
- int main(){
- int limiar;//lembrar de colocar isso para string
- char nome[30];//lembrar de colocar um while ou alguma coisa para que
- //esse programa continue num loop eterno
- setlocale(LC_ALL, "Portuguese");
- cout<<"Digite o nome do arquivo\n";
- cin>>nome;
- cout<<"Digite o limiar\n";
- cin>>limiar;
- Img img;
- Img img_out;
- insere_nome(nome);
- abre_img(nome,img);
- rotaciona(img,img_out);
- salva_img(nome,img_out);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement