cavernah 0 Denunciar post Postado Fevereiro 7, 2009 Olá! Sou iniciante em C++ e já estou com problemas! Tenho uma imagem de um bit, ou seja, se tem pixel, seu valor eh 1, se nao tem, seu valor eh 0. Ex de imagem: x>12345678910 y 01 0000000000 02 0010000010 03 0000000000 04 0000000000 05 0000011111 06 0000000000 07 0001000000 08 0010000000 09 0100000000 10 1000000000 Correndo a imagem de cima para baixo e da esquerda pra direita, temos entao os pontos: (1,10), (2,9), (3,2), (3,8), (4,7), (6,5), (7,5), (8,5), (9,2), (9,5), (10,5). Assim quero percorrer esta imagem para retirar os pontos: (3,2) e (9,2) isolados na imagem e salvar os pontos que quero em um arraytemp. Mas gostaria de salvar tipo em array[0] os pontos (1,10), (2,9), (3,8), (4,7) e em array[1] os pontos (6,5), (7,5), (8,5), (9,5), (10,5). Alguém tem alguma idéia de como melhor fazer isto? Aqui está minha tentativa de código com falhas que não sei onde está para retirar os pontos isolados: int z = 0; int arraytempx[z]; int arraytempy[z]; int dy = 9; // altura da image em y int dx = 9; // largura da imagem em x int pic[dy][dx]; //originalmente pic é dinamico for (int y=0; y<dy; y++) { for (int x=0; x<dx; x++) { if (pic[y][x]==0) {continue;} if (pic[y][x]-pic[y][x+1] == 0) {arraytempx[z++]=x;arraytempy[z++]=y;continue;} if (pic[y][x]-pic[y+1][x] == 0) {arraytempx[z++]=x;arraytempy[z++]=y;continue;} if (pic[y][x]-pic[y+1][x+1] == 0) {arraytempx[z++]=x;arraytempy[z++]=y);continue;} } } Valeu galera! Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Fevereiro 7, 2009 Use um vector ou qualquer coisa dinâmica. Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Fevereiro 9, 2009 #include <iostream> #include <vector> #include <string> using namespace std; class Ponto { private: int x,y; public: Ponto(int X,int Y){ x = X; y = Y; } void imprimirPonto() { cout << "(" << x << "," << y << ")"; } }; class Imagem { private: int x,y; vector<string> linhas; public: Imagem(int X, int Y) { x = X; y = Y; } void lerImagem() { string tmp; int indice; tmp.reserve(x); for(indice = 0; indice < y; indice++) { cin >> tmp; linhas.push_back(tmp); } } /* SE S SD * E C D * IE I ID */ bool eIsolado(const int linha,const int coluna) { if (coluna < x-1 && linhas[linha].at(coluna+1) == '1') return false; //D if (coluna && linhas[linha].at(coluna-1) == '1') return false; //E if (linha < y-1 && linhas[linha+1].at(coluna) == '1') return false; //I if (linha && linhas[linha-1].at(coluna) == '1') return false; //S if (linha < y-1 && coluna < x-1 && linhas[linha+1].at(coluna+1) == '1') return false; if (linha && coluna < x-1 && linhas[linha-1].at(coluna+1) == '1') return false; if (linha < y-1 && coluna && linhas[linha+1].at(coluna-1) == '1') return false; if (linha && coluna && linhas[linha-1].at(coluna-1) == '1') return false; return true; } const vector<Ponto> procurarIsolados() { int indice; string::size_type inicio_busca; vector<Ponto> isolados; for(indice = 0; indice < y; indice++){ inicio_busca = 0; while (true) { if (inicio_busca >= string::npos) break; inicio_busca = linhas[indice].find('1',inicio_busca); if (inicio_busca == string::npos) break; /* Se for encontrado um ponto verifica se é isolado. */ if(eIsolado(indice,inicio_busca)) { Ponto tmp(indice,inicio_busca); isolados.push_back(tmp); } inicio_busca++; } } return isolados; } }; int main (int argc, char *argv[]) { Imagem I(10,10); cout << "Digite a imagem:\n"; I.lerImagem(); vector<Ponto> pontosIsolados = I.procurarIsolados(); int tamanho = pontosIsolados.size(); if (!tamanho) cout << "Não existem pontos isolados.\n"; else for(int i=0;i<tamanho;i++) pontosIsolados[i].imprimirPonto(); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites