Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. General talk
  3. The Lounge
  4. Create a structuring element of 3 * 3
Forum Updated to NodeBB v4.3 + New Features

Create a structuring element of 3 * 3

Scheduled Pinned Locked Moved The Lounge
1 Posts 1 Posters 1.3k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I Offline
    I Offline
    isaacEnrique
    wrote on 28 Nov 2012, 15:23 last edited by
    #1

    Greetings.

    I'm working Qt and OpenCV. I am currently testing the functions of mathematical morphology.
    I'm trying to create a rectangular structuring element of 3 * 3, using the cvCreateStructuringElementEx() function, as follows:

    cvCreateStructuringElementEx ee = (3, 3, 1, 1, CV_SHAPE_RECT)

    This should create the structuring element I seek not?

    Then apply the dilation operation to two previously created images. In the second image using 'ee' and first put so as NULL use default structuring element. so:

    cvDilate (entrada_gris, dilatacion1, NULL, iteraciones);
    cvDilate (entrada_gris, dilatacion2, ee, iteraciones);

    Variable 'iteraciones' is the number of iterations that the operation is applied, usually I use 10.

    Since the default structuring element is a solid rectangle 3 * 3 (and if I'm creating the structuring element 'ee' correctly), the result should be the same, but it is not because when a comparison between the images:

    cvCmp (dilatacion1, dilatacion2, comparison, CV_CMP_EQ);

    I get an image that is not completely white (as it should be if the two images are the same right?).
    If anyone has an idea of what may be happening or give me some light I would appreciate advance.

    Attach program source code in case anyone wants to see:

    @#include "opencv.hpp"

    int main(int argc, char **argv)
    {
    IplImage *entrada, *entrada_gris;
    IplImage *dilatacion1, *dilatacion2, *comparacion;
    IplConvKernel *ee;
    unsigned iteraciones;

    /* cargar imagen de entrada */
    entrada = cvLoadImage( argv[1] );
    
    /* leer el numero de iteraciones */
    iteraciones = 0;
    for(unsigned i = 0; i < strlen(argv[2]); i++)
    {
        iteraciones = (iteraciones * 10) + (argv[2][i] - '0');
    }
    
    /* ******************************** */
    FILE *salida = fopen&#40;"salida.txt", "w"&#41;;
    
    fprintf(salida, "iteraciones = %d\n", iteraciones);
    fclose( salida );
    /* ******************************** */
    
    /* convertir a escala de gris */
    entrada_gris = cvCreateImage(cvGetSize(entrada), IPL_DEPTH_8U, 1);
    cvCvtColor(entrada, entrada_gris, CV_BGR2GRAY);
    
    /* asignar la memoria para las imagenes imagenes */
    dilatacion1 = cvCreateImage(cvGetSize(entrada), IPL_DEPTH_8U, 1);
    dilatacion2 = cvCreateImage(cvGetSize(entrada), IPL_DEPTH_8U, 1);
    comparacion = cvCreateImage(cvGetSize(entrada), IPL_DEPTH_8U, 1);
    
    /* crear EE */
    ee = cvCreateStructuringElementEx(3, 3, 1, 1, CV_SHAPE_RECT);
    
    /* aplicar dilatacion */
    cvDilate(entrada_gris, dilatacion1, NULL, iteraciones);
    cvDilate(entrada_gris, dilatacion2, ee, iteraciones);
    
    cvCmp(dilatacion1, dilatacion2, comparacion, CV_CMP_EQ);
    
    /* crear las ventanas para mostrar las imagenes */
    cvNamedWindow("IMAGEN DE ENTRADA", CV_WINDOW_NORMAL);
    cvNamedWindow("IMAGEN DE ENTRADA - ESCALA DE GRIS", CV_WINDOW_NORMAL);
    cvNamedWindow("DILATACION (EE por defecto)", CV_WINDOW_NORMAL);
    cvNamedWindow("DILATACION (EE creado)", CV_WINDOW_NORMAL);
    cvNamedWindow("COMPARACION", CV_WINDOW_NORMAL);
    
    /* mostrar las imagenes en las ventanas apropiadas */
    cvShowImage("IMAGEN DE ENTRADA", entrada);
    cvShowImage("IMAGEN DE ENTRADA - ESCALA DE GRIS", entrada_gris);
    cvShowImage("DILATACION (EE por defecto)", dilatacion1);
    cvShowImage("DILATACION (EE creado)", dilatacion2);
    cvShowImage("COMPARACION", comparacion);
    
    /* esperar a que el usuario presione una tecla */
    cvWaitKey(0);
    
    /* liberar la memoria reservada */
    cvReleaseStructuringElement( &ee );
    
    cvReleaseImage( &entrada );
    cvReleaseImage( &entrada_gris );
    cvReleaseImage( &dilatacion1 );
    cvReleaseImage( &dilatacion2 );
    cvReleaseImage( &comparacion );
    
    cvDestroyWindow( "IMAGEN DE ENTRADA" );
    cvDestroyWindow( "IMAGEN DE ENTRADA - ESCALA DE GRIS" );
    cvDestroyWindow( "DILATACION (EE por defecto)" );
    cvDestroyWindow( "DILATACION (EE creado)" );
    cvDestroyWindow( "COMPARACION" );
    
    return 0;
    

    }
    @

    Isaac Pérez
    Programming is understanding.

    1 Reply Last reply
    0

    1/1

    28 Nov 2012, 15:23

    • Login

    • Login or register to search.
    1 out of 1
    • First post
      1/1
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved