Exemple #1
0
// Devuelve el código Greenlee de la vecindad de un pixel
uchar vect::codVecindad(Mat &img, Point pun) {
    uchar vecinos[8];
    vecindad(img, pun, vecinos);
    return 128 * vecinos[0] + vecinos[1] + 2 * vecinos[2]
        + 4 * vecinos[3] + 8 * vecinos[4] + 16 * vecinos[5]
        + 32 * vecinos[6] + 64 * vecinos[7];
}
Exemple #2
0
// Recorre un trazo desde pun y almacena sus puntos en trazo
// No removemos puntos colineales para mejorar los resultados del Ramer-Douglas-Peuker
void vect::recorrerTrazo(Mat &imgBase, Point pun, vector<Point2f> &trazo, bool trazoCerrado) {
    uchar cod;
    Point2f punIni;
    trazo.clear();

    // Validamos el trazo a recorrer
    if (imgBase.at<uchar>(pun) == 255) return;
    if (codVecindad(imgBase, pun) == 0) return;

    punIni = pun;
    trazo.push_back(punIni);

    // Si es trazo cerrado, borramos 1 pixel e iniciamos desde el siguiente pixel detectado
    if (trazoCerrado) {
        uchar i = 0;
        uchar vecinos[8];


        vecindad(imgBase, pun, vecinos);
        imgBase.at<uchar>(pun) = 255;
        while (vecinos[i] != 1) i++;
        moverPunto(pun, i);
    }


    while (imgBase.at<uchar>(pun) != 255) {
        cod = codVecindad(imgBase, pun);
        imgBase.at<uchar>(pun) = 255; // punto recorrido se borra

        if (cod != 0) {
            trazo.push_back(pun);
            moverPuntoCod(pun, cod);
        }
        else {
            if (trazo.size() > 0) trazo.push_back(pun);
        }
    }

    // Si es trazo cerrado, unir los últimos 2 puntos
    if (trazoCerrado) trazo.push_back(punIni);
}
void Matriz::iniciar (Juego &game)
{
	/*Inicia matriz de juego, Modifica el atributo Cuadrado.mina
	 * de acuerdo al atributo Juego.prob de manera aleatoria
	 * Notese el uso previo de la funcion vector.resize para modificar el tamaño
	 * del vector de vectores y el uso del iterador.
	
	*/
	
	_matriz.resize (_fil);
	for (std::vector<std::vector<Cuadrado> >::iterator it = _matriz.begin(); it != _matriz.end(); ++it)
	{
		it->resize (_col);
	}
	 
	
	time_t t;
	
	for (int i=0; i<_fil;i++)
	{
		for (int j=0; j<_col; j++)
		{
			
			
			srand(time_seed()+i*i-j);
			float x = static_cast <float> (rand()) / static_cast <float> (RAND_MAX);
			
			if (x < game.get_prob() )
			{
				_matriz[i][j].set_mina(true);
				game.set_cuantas_minas( game.get_cuantas_minas() +1);

			}
		}
	}
	vecindad();
}