Advertisement
Danjour

Untitled

Jun 16th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.99 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){ //Aqui o "img" vai pegar o img_out das funções
  51.                                     //nome aqui será o nome que será salvo o arquivo, pode-se também optar por colocar o nome
  52.                                      //new_nome e colocando o final PPM para salvar a imagem e abrir corretamente.
  53.     ofstream arq("new_lake.ppm");
  54.     if(!arq.is_open())
  55.     {
  56.         cout << "Erro: Arquivo não foi criado\n";
  57.         exit(0);
  58.     }
  59.     arq<<"P3"<<"\n";
  60.     arq<<img.comprimento<<" "<<img.altura<<"\n";
  61.     arq<<255<<"\n";
  62.     for (int i=0;i<img.comprimento;i++){
  63.         for(int j=0;i<img.altura;j++){
  64.             arq<<img.matrizimagem[i][j][R]<<" "<<img.matrizimagem[i][j][G]<<" "<<img.matrizimagem[i][j][B]<<" "<<endl;
  65.         }
  66.     }
  67.  
  68.     arq.close();
  69.  
  70.  
  71. }
  72. 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
  73.                                                             //a que irá sair para a função que salva
  74.     img_out.comprimento=img_in.comprimento;
  75.     img_out.altura=img_in.altura;
  76.  
  77.     for(int i = 0; i < img_out.comprimento; i++){
  78.         for(int j = 0; j < img_out.altura; j++){
  79.                 if(img_in.matrizimagem[i][j][R]>limiar){
  80.                         img_in.matrizimagem[i][j][R]=255;
  81.                 }else{
  82.                     img_in.matrizimagem[i][j][R]=0;
  83.                 }
  84.                 if(img_in.matrizimagem[i][j][G]>limiar){
  85.                     img_in.matrizimagem[i][j][G]=255;
  86.                 }else{
  87.                     img_in.matrizimagem[i][j][G]=0;
  88.                 }
  89.                 if(img_in.matrizimagem[i][j][B]>limiar){
  90.                     img_in.matrizimagem[i][j][B]=255;
  91.                 }else{
  92.                     img_in.matrizimagem[i][j][B]=0;
  93.                 }
  94.                 img_out.matrizimagem[i][j][R]=img_in.matrizimagem[i][j][R];
  95.                 img_out.matrizimagem[i][j][G]=img_in.matrizimagem[i][j][G];
  96.                 img_out.matrizimagem[i][j][B]=img_in.matrizimagem[i][j][B];
  97.                 }
  98.         }
  99.     }
  100.  
  101.  
  102.  
  103.  
  104. int main(){
  105.     int limiar;//lembrar de colocar isso para string
  106.     char nome[30];//lembrar de colocar um while ou alguma coisa para que
  107.                //esse programa continue num loop eterno
  108.     setlocale(LC_ALL, "Portuguese");
  109.     cout<<"Digite o nome do arquivo\n";
  110.     cin>>nome;
  111.     cout<<"Digite o limiar\n";
  112.     cin>>limiar;
  113.     Img img;
  114.     Img img_out;
  115.     insere_nome(nome);
  116.     abre_img(nome,img);
  117.     binariza_canal(img, img_out, limiar);
  118.     salva_img(nome,img_out);
  119. return 0;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement