Estoy escribiendo código manual para erosión o dilatación. Y no sé por qué el siguiente código no funciona.

Como puede ver, cuando estoy en el punto de (i, j) doy la vuelta a este punto y busco cualquier píxel blanco. Si hay algún píxel blanco (en la matriz Little 3x3 (ii, jj)), cambio mi punto (i, j) a blanco.

¿Alguien sabe por qué no funciona?

Me aseguré de cargar la imagen binaria. Si cuento el resumen de Píxeles blancos y negros, entonces me da la cantidad correcta de Píxeles etery.

 for (int i=1; i<gray.cols-1; i++)
    {
        for(int j=1; j<gray.rows-1; j++)
            {
                ii=i;
                jj=j;

                for (ii-1; ii<i+2; ii++ )
                {
                    for (jj-1; jj<j+2; jj++ )
                    {

                        if (gray.at<uchar>(ii,jj) ==255)
                            gray.at<uchar>(i,j) = 255;
                    };
                };
};

¿Si alguien tiene una idea de cómo hacerlo de otra manera?

0
Domajnik 27 oct. 2019 a las 01:55

1 respuesta

La mejor respuesta

Debe crear una imagen temporal para escribir los resultados de la erosión / dilatación. Tu problema es que estás escribiendo a imagen original. Suponga que solo el primer píxel es blanco. En la primera iteración, coloreará el segundo píxel a blanco. Y luego, en la segunda iteración, verá el segundo píxel recién coloreado y el tercer píxel de color en blanco. Y así sucesivamente para todos los píxeles en línea.

0
Michael Burdinov 27 oct. 2019 a las 12:49