procesamiento.tpp
Código:
#include "procesamiento.h"
#include <iostream>
template <class T>
void Umbralizar(const Imagen<T> &origen, Imagen<T> &destino, const T &t1, const T &t2/*, T* &v*/){
Imagen<T> aux(origen.num_filas(),origen.num_columnas());
typename Imagen<T>::const_iterator_fila it1_f;
typename Imagen<T>::const_iterator_fila::const_iterator_columna it1_c;
typename Imagen<T>::iterator_fila it2_f;
typename Imagen<T>::iterator_fila::iterator_columna it2_c;
for(it1_f=origen.begin(),it2_f=aux.begin();it1_f!=origen.end();++it1_f,++it2_f){
for(it1_c=it1_f.begin(),it2_c=it2_f.begin();it1_c!=it1_f.end();++it1_c,++it2_c){
if(*it1_c>t1 && *it1_c<t2){
*it2_c=*it1_c;
}
else
*it2_c=255;
}
}
destino=aux;
}
main
Código:
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <imagenES.h>
#include "imagen.h"
#include "procesamiento.h"
using namespace std;
int main (int argc, char *argv[]){
char *origen, *destino; // nombres de los ficheros
unsigned char *image;
int nf, nc;//, npixeles; // Num. de filas y columnas de las imagenes
// Comprobar validez de la llamada
if (argc != 3){
cerr << "Error: Numero incorrecto de parametros.\n";
cerr << "Uso: negativo <FichImagenOriginal> <FichImagenDestino>\n";
exit (1);
}
origen = argv[1];
destino = argv[2];
cout << endl;
cout << "Fichero origen: " << origen << endl;
cout << "Fichero resultado: " << destino << endl;
// Leer la imagen del fichero de entrada
image = LeerImagenPGM (origen, nf, nc);
if (!image){
cerr << "Error: No pudo leerse la imagen." << endl;
cerr << "Terminando la ejecucion del programa." << endl;
exit (1);
}
Imagen<unsigned char> img(nf,nc,image);
Imagen<unsigned char> dest(nf,nc,image);
// Mostrar los parametros calculados por LeerImagenPGM()
cout << endl;
cout << "Dimensiones de " << origen << ":" << endl;
cout << " Imagen = " << nf << " filas x " << nc << " columnas " << endl;
Umbralizar(img,dest,(unsigned char)100,(unsigned char)200);
if (EscribirImagenPGM (destino, image, nf, nc))
cout << "La imagen se guardo en " << destino << endl;
else{
cerr << "Error: No pudo guardarse la imagen." << endl;
cerr << "Terminando la ejecucion del programa." << endl;
exit (2);
}
// // Liberar la imagen
delete [] image;
return (0);
}
el compilador no da ningun error. el problema es una violacion de segmento en la funcion umbralizar. cuando entra en el operator= al intentar copiar aux en destino. probando mucho he averiguado que el problema esta al intentar borrar pixeles[0] en la funcion Borrar que esta usando el operator=.
tambien he comprobado que el error no esta en borrar pixeles[0]. tambien me da problemas al intentar acceder a pixeles[0] en el operator= justo antes de intentar utilizar la funcion borrar. tambien he comprobado que cuando se accede a la funcion borrar desde el destructor no hay problemas. asi que el problema esta en el operator=.
yo el codigo lo veo bien, pero esta claro que hay algo que se me escapa. no he tenido mas remedio que pedir ayuda aqui porque llevo dias haciendo pruebas y no veo donde esta el error.
espero que me podais ayudar, gracias!!