LER LINEAS
HOLA a todos, soy estudiante de Informatica de Sistemas. Estoy haciendo el Proyecto de Fin de Carrera y estoy intentado leer una imagen pero el problema que tengo es que no puedo leer la lineas diagonales. Os explico seguidamente el problema.
MUCHAS GRACIAS. SILVIA.
A partir de una imagen en 2 dimensiones, que sea en formato *jpg, y que sea en blanco y negro. Como puedo leer las posibles lÃneas (horizontales, verticales y diagonales) de la imagen?
• Para saber el color de cada pÃxel, accedo con VTK, si el color del pÃxel es 255 , es BLANCO, y si es 0, entonces el pÃxel es NEGRO.
• Y el algoritmo para leer las lÃneas lo he de realizar en C++, tendrÃa que poder averiguar que hay una lÃnea del pÃxel (x,y) al (x,y).En realidad, la parte del algoritmo que no me sale es cuando se cruza una lÃnea diagonal con una vertical o horizontal.
/**********************************************************************
ACCEDER A UNA IMAGEN CON FORMATO *JPG
**********************************************************************/
//Creamos el objeto fuente JPEGReader, el cual lee archivos jpeg:
vtkJPEGReader *reader = vtkJPEGReader::New();
//Miramos si se trata de una archivo *.jpeg
if (!reader->CanReadFile(Nombre_vista))
printf(\\\\\\\"\\\\\\\\n Error de lectura\\\\\\\");
//Especificamos el nombre del archivo
reader->SetFileName(Nombre_vista);
//Actualizamos el objeto.
reader->Update();
//Obtemos la salida de la fuente ( del reader), la cual se trata de una imagen de datos.
vtkImageData* imagen = reader->GetOutput();
//Hallamos la dimensión en pixels de la imagen:
int dim[2];
imagen->GetDimensions(dim); //dim[0]-->ancho
//dim[1]-->alto
ancho=dim[0];
alto=dim[1];
/**********************************************************************
GUARDAR LA INFORMACIÓN DE LOS PIXELES DE LA IMAGEN
*********************************************************************/
//Creamos una matriz llamada \\\\\\\"Imagen_etiquetada\\\\\\\".
//Cada posición de la matriz contendrá información sobre la imagen:
// 1)ColorPixel: NEGRO(equivale a un 1) BLANCO (equivale a un 0)
//Reservamos memoria dinámicamente
Imagen_etiquetada=(tEtiquetas **) malloc (sizeof (tEtiquetas*) * alto);
for (i=0; i<alto; i++)
Imagen_etiquetada[i]=(tEtiquetas *) malloc (sizeof (tEtiquetas) * ancho);
unsigned char *pixel;
//Para cada pixel de la imagen averiguaremos su color,
//el cual es la union de los tres componentes RGB (Red- Green-Blue)
for (i=0; i<alto; i++)
{
for (j=0; j<ancho; j++)
{
//GetScalarPointer-->permite obtener un puntero al pixel indicado
pixel = (unsigned char*)imagen->GetScalarPointer(j, i, 0);
//Obtenemos el color del pixel
ColorPixel= (pixel[0]+pixel[1]+pixel[2])/3;
if(ColorPixel>=0 && ColorPixel<=50)
Imagen_etiquetada[i][j].ColorPixel=1;//Pixel NEGRO
else
Imagen_etiquetada[i][j].ColorPixel=0;//Pixel BLANCO
}
}
MUCHAS GRACIAS. SILVIA.
A partir de una imagen en 2 dimensiones, que sea en formato *jpg, y que sea en blanco y negro. Como puedo leer las posibles lÃneas (horizontales, verticales y diagonales) de la imagen?
• Para saber el color de cada pÃxel, accedo con VTK, si el color del pÃxel es 255 , es BLANCO, y si es 0, entonces el pÃxel es NEGRO.
• Y el algoritmo para leer las lÃneas lo he de realizar en C++, tendrÃa que poder averiguar que hay una lÃnea del pÃxel (x,y) al (x,y).En realidad, la parte del algoritmo que no me sale es cuando se cruza una lÃnea diagonal con una vertical o horizontal.
/**********************************************************************
ACCEDER A UNA IMAGEN CON FORMATO *JPG
**********************************************************************/
//Creamos el objeto fuente JPEGReader, el cual lee archivos jpeg:
vtkJPEGReader *reader = vtkJPEGReader::New();
//Miramos si se trata de una archivo *.jpeg
if (!reader->CanReadFile(Nombre_vista))
printf(\\\\\\\"\\\\\\\\n Error de lectura\\\\\\\");
//Especificamos el nombre del archivo
reader->SetFileName(Nombre_vista);
//Actualizamos el objeto.
reader->Update();
//Obtemos la salida de la fuente ( del reader), la cual se trata de una imagen de datos.
vtkImageData* imagen = reader->GetOutput();
//Hallamos la dimensión en pixels de la imagen:
int dim[2];
imagen->GetDimensions(dim); //dim[0]-->ancho
//dim[1]-->alto
ancho=dim[0];
alto=dim[1];
/**********************************************************************
GUARDAR LA INFORMACIÓN DE LOS PIXELES DE LA IMAGEN
*********************************************************************/
//Creamos una matriz llamada \\\\\\\"Imagen_etiquetada\\\\\\\".
//Cada posición de la matriz contendrá información sobre la imagen:
// 1)ColorPixel: NEGRO(equivale a un 1) BLANCO (equivale a un 0)
//Reservamos memoria dinámicamente
Imagen_etiquetada=(tEtiquetas **) malloc (sizeof (tEtiquetas*) * alto);
for (i=0; i<alto; i++)
Imagen_etiquetada[i]=(tEtiquetas *) malloc (sizeof (tEtiquetas) * ancho);
unsigned char *pixel;
//Para cada pixel de la imagen averiguaremos su color,
//el cual es la union de los tres componentes RGB (Red- Green-Blue)
for (i=0; i<alto; i++)
{
for (j=0; j<ancho; j++)
{
//GetScalarPointer-->permite obtener un puntero al pixel indicado
pixel = (unsigned char*)imagen->GetScalarPointer(j, i, 0);
//Obtenemos el color del pixel
ColorPixel= (pixel[0]+pixel[1]+pixel[2])/3;
if(ColorPixel>=0 && ColorPixel<=50)
Imagen_etiquetada[i][j].ColorPixel=1;//Pixel NEGRO
else
Imagen_etiquetada[i][j].ColorPixel=0;//Pixel BLANCO
}
}
