Advertisement
Danjour

Untitled

Jun 15th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.97 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.     cin >> nome;
  16.     int tam = strlen(nome);
  17.     while (nome[tam - 4] != '.' || nome[tam - 3]!= 'p' || nome[tam - 2] != 'p' || nome[tam - 1] != 'm')
  18.     {
  19.         cout << "NOME INVALIDO!" << endl;
  20.         cout << "Digite o nome do arquivo(.ppm): ";
  21.         cin >> nome;
  22.         tam = strlen(nome);
  23.     }
  24. }
  25. void abre_img(char nome[], Img& img_in){
  26.  
  27.     // ESSA FUNÇÃO ABRE O ARQUIVO DE IMAGEM PARA SER MODIFICADA NAS FUNÇÕES E AVISA SE A IMAGEM NÃO FOI ENCONTRADA
  28.     ifstream arq(nome);
  29.     char tipo[2];
  30.     int pixels;
  31.     if(!arq.is_open())
  32.     {
  33.         cout << "Erro: arquivo nao encontrado\n";
  34.         exit(0);
  35.     }
  36.     arq >> tipo;
  37.     arq >> img_in.comprimento  >> img_in.altura;
  38.     arq >> pixels;
  39.  
  40.     // ABRE A IMAGEM PIXEL POR PIXEL
  41.     for(int i = 0; i < img_in.altura; i++)
  42.     {
  43.         for(int j = 0; j < img_in.comprimento; j++)
  44.         {
  45.             arq >> img_in.matrizimagem[i][j][R] >> img_in.matrizimagem[i][j][G] >> img_in.matrizimagem[i][j][B];
  46.         }
  47.     }
  48.     arq.close();
  49.  
  50. }
  51. void salva_img(char nome[], Img img){ //Aqui o "img" vai pegar o img_out das funções
  52.                                     //nome aqui será o nome que será salvo o arquivo, pode-se também optar por colocar o nome
  53.                                      //new_nome e colocando o final PPM para salvar a imagem e abrir corretamente.
  54.     ofstream arq("new_lake.ppm");
  55.     if(!arq.is_open())
  56.     {
  57.         cout << "Erro: Arquivo não foi criado\n";
  58.         exit(0);
  59.     }
  60.     arq<<"P3"<<"\n";
  61.     arq<<img.comprimento<<" "<<img.altura<<"\n";
  62.     arq<<255<<"\n";
  63.     for (int i=0;i<img.comprimento;i++){
  64.         for(int j=0;i<img.altura;j++){
  65.             arq<<img.matrizimagem[i][j][R]<<" "<<img.matrizimagem[i][j][G]<<" "<<img.matrizimagem[i][j][B]<<" "<<endl;
  66.         }
  67.     }
  68.  
  69.     arq.close();
  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.  
  78.     for(int i = 0; i < img_out.comprimento; i++){
  79.         for(int j = 0; j < img_out.altura; j++){
  80.                 if(img_in.matrizimagem[i][j][R]>limiar){
  81.                         img_in.matrizimagem[i][j][R]=255;
  82.                 }else{
  83.                     img_in.matrizimagem[i][j][R]=0;
  84.                 }
  85.                 if(img_in.matrizimagem[i][j][G]>limiar){
  86.                     img_in.matrizimagem[i][j][G]=255;
  87.                 }else{
  88.                     img_in.matrizimagem[i][j][G]=0;
  89.                 }
  90.                 if(img_in.matrizimagem[i][j][B]>limiar){
  91.                     img_in.matrizimagem[i][j][B]=255;
  92.                 }else{
  93.                     img_in.matrizimagem[i][j][B]=0;
  94.                 }
  95.                 img_out.matrizimagem[i][j][R]=img_in.matrizimagem[i][j][R];
  96.                 img_out.matrizimagem[i][j][G]=img_in.matrizimagem[i][j][G];
  97.                 img_out.matrizimagem[i][j][B]=img_in.matrizimagem[i][j][B];
  98.                 }
  99.         }
  100.     }
  101.  
  102.  
  103.  
  104.  
  105. int main(){
  106.     int limiar;//lembrar de colocar isso para string
  107.     char nome[30];//lembrar de colocar um while ou alguma coisa para que
  108.                //esse programa continue num loop eterno
  109.     setlocale(LC_ALL, "Portuguese");
  110.  
  111.     cin.ignore();
  112.     cin.getline(nome,30);
  113.     cin>>limiar;
  114.     Img img;
  115.     Img img_out;
  116.     insere_nome(nome);
  117.     abre_img(nome,img);
  118.     binariza_canal(img, img_out, limiar);
  119.     salva_img(nome,img_out);
  120. return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement