Advertisement
Danjour

Untitled

Jun 20th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <fstream>
  5. #include <locale.h>
  6. int const MAXX=512,R=0,G=1,B=2;
  7. using namespace std;
  8.  struct Img{
  9.      int altura;
  10.      int comprimento;
  11.      int matrizimagem[MAXX][MAXX][3]; //struct dos pixels em RGB;
  12. };
  13. void insere_nome (char nome[]){
  14.     // ESSA FUNÇÃO VAI SER ÚTIL NA HORA DE ABRIR O ARQUIVO E NA HORA DE SALVAR A IMAGEM ALTERADA
  15.     int tam = strlen(nome);
  16.     while (nome[tam - 4] != '.' || nome[tam - 3]!= 'p' || nome[tam - 2] != 'p' || nome[tam - 1] != 'm')
  17.     {
  18.         cout << "NOME INVALIDO!" << endl;
  19.         cout << "Digite o nome do arquivo(.ppm): ";
  20.         cin >> nome;
  21.         tam = strlen(nome);
  22.     }
  23. }
  24. void abre_img(char nome[], Img& img_in){
  25.  
  26.     // ESSA FUNÇÃO ABRE O ARQUIVO DE IMAGEM PARA SER MODIFICADA NAS FUNÇÕES E AVISA SE A IMAGEM NÃO FOI ENCONTRADA
  27.     ifstream arq(nome);
  28.     char tipo[2];
  29.     int pixels;
  30.     if(!arq.is_open())
  31.     {
  32.         cout << "Erro: arquivo nao encontrado\n";
  33.         exit(0);
  34.     }
  35.     arq >> tipo;
  36.     arq >> img_in.comprimento  >> img_in.altura;
  37.     arq >> pixels;
  38.  
  39.     // ABRE A IMAGEM PIXEL POR PIXEL
  40.     for(int i = 0; i < img_in.altura; i++)
  41.     {
  42.         for(int j = 0; j < img_in.comprimento; j++)
  43.         {
  44.             arq >> img_in.matrizimagem[i][j][R] >> img_in.matrizimagem[i][j][G] >> img_in.matrizimagem[i][j][B];
  45.         }
  46.     }
  47.     arq.close();
  48.  
  49. }
  50.   void salva_img(char nome[], Img img)
  51. {
  52.     char novo[6];
  53.     strcpy(novo, "novo_");
  54.     ofstream arq(strcat(novo,nome));
  55.     arq << "P3" << endl;
  56.     arq << img.comprimento << " " << img.altura << endl;
  57.     arq << 255 << endl;
  58.  
  59.     for (int i = 0; i < img.altura; i++)
  60.     {
  61.         for (int j = 0; j < img.comprimento; j++)
  62.         {
  63.             arq << img.matrizimagem[i][j][R] << " " << img.matrizimagem[i][j][G] << " "  << img.matrizimagem[i][j][B] << " ";
  64.         }
  65.         arq << endl;
  66.     }
  67.  
  68.     arq.close();
  69. }
  70.  
  71.  
  72.  
  73. 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
  74.                                                             //a que irá sair para a função que salva
  75.     img_out.comprimento=img_in.comprimento;
  76.     img_out.altura=img_in.altura;
  77.     for(int i = 0; i < img_out.comprimento; i++){
  78.         for(int j = 0; j < img_out.altura; j++){
  79.                 if(limiar<(img_in.matrizimagem[i][j][R]+img_in.matrizimagem[i][j][G]+img_in.matrizimagem[i][j][B])/3)
  80.             {
  81.                 img_out.matrizimagem[i][j][R]=255;
  82.                 img_out.matrizimagem[i][j][G]=255;
  83.                 img_out.matrizimagem[i][j][B]=255;
  84.             }
  85.             // CASO CONTRARIO CONVERTE-SE O VALOR DE CADA PIXEL PARA 0.
  86.             else
  87.             {
  88.                 img_out.matrizimagem[i][j][R]=0;
  89.                 img_out.matrizimagem[i][j][G]=0;
  90.                 img_out.matrizimagem[i][j][B]=0;
  91.             }
  92.         }
  93.     }
  94. }
  95.  
  96. void rotaciona(Img img_in, Img& img_out){
  97.     img_out.comprimento=img_in.comprimento;
  98.     img_out.altura=img_in.altura;
  99.     for (int i=0; i<img_in.altura; i++){
  100.             int n=img_in.altura-1;
  101.         for (int j=0; j<img_in.comprimento; j++){
  102.             img_out.matrizimagem[i][j][R]=img_in.matrizimagem[n-j][i][R];
  103.             img_out.matrizimagem[i][j][G]=img_in.matrizimagem[n-j][i][G];
  104.             img_out.matrizimagem[i][j][B]=img_in.matrizimagem[n-j][i][B];
  105.         }
  106.     }
  107. }
  108.  
  109.  
  110. int main(){
  111.     int limiar;//lembrar de colocar isso para string
  112.     char nome[30];//lembrar de colocar um while ou alguma coisa para que
  113.                //esse programa continue num loop eterno
  114.     setlocale(LC_ALL, "Portuguese");
  115.  
  116.     cout<<"Digite o nome do arquivo\n";
  117.     cin>>nome;
  118.     cout<<"Digite o limiar\n";
  119.     cin>>limiar;
  120.     Img img;
  121.     Img img_out;
  122.     insere_nome(nome);
  123.     abre_img(nome,img);
  124.     rotaciona(img,img_out);
  125.     salva_img(nome,img_out);
  126.     return 0;
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement