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){ //Aqui o "img" vai pegar o img_out das funções
- //nome aqui será o nome que será salvo o arquivo, pode-se também optar por colocar o nome
- //new_nome e colocando o final PPM para salvar a imagem e abrir corretamente.
- ofstream arq("new_lake.ppm");
- if(!arq.is_open())
- {
- cout << "Erro: Arquivo não foi criado\n";
- exit(0);
- }
- arq<<"P3"<<"\n";
- arq<<img.comprimento<<" "<<img.altura<<"\n";
- arq<<255<<"\n";
- for (int i=0;i<img.comprimento;i++){
- for(int j=0;i<img.altura;j++){
- arq<<img.matrizimagem[i][j][R]<<" "<<img.matrizimagem[i][j][G]<<" "<<img.matrizimagem[i][j][B]<<" "<<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(img_in.matrizimagem[i][j][R]>limiar){
- img_in.matrizimagem[i][j][R]=255;
- }else{
- img_in.matrizimagem[i][j][R]=0;
- }
- if(img_in.matrizimagem[i][j][G]>limiar){
- img_in.matrizimagem[i][j][G]=255;
- }else{
- img_in.matrizimagem[i][j][G]=0;
- }
- if(img_in.matrizimagem[i][j][B]>limiar){
- img_in.matrizimagem[i][j][B]=255;
- }else{
- img_in.matrizimagem[i][j][B]=0;
- }
- img_out.matrizimagem[i][j][R]=img_in.matrizimagem[i][j][R];
- img_out.matrizimagem[i][j][G]=img_in.matrizimagem[i][j][G];
- img_out.matrizimagem[i][j][B]=img_in.matrizimagem[i][j][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);
- binariza_canal(img, img_out, limiar);
- salva_img(nome,img_out);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement