示例#1
0
文件: thinning.cpp 项目: helderc/hIP
bool Thinning::vizinhanca(QImage *img, int x,int y) {



// verificaCorerifica se o número de vizinhos pretos está na faixa entre 2 e 6
int vizinhos=0;

vizinhos = ( verificaPixel(img, NO(x,y)) + verificaPixel(img, N(x,y)) + verificaPixel(img,NE(x,y)) +
           verificaPixel(img, O(x,y)) + verificaPixel(img, L(x,y)) + verificaPixel(img, SO(x,y)) +
           verificaPixel(img, S(x,y)) + verificaPixel(img, SE(x,y)) );

if (vizinhos < 2 || vizinhos > 6) return false;

// verificaCorerifica conectividade é igual 1...
int conectividade = 0;

if(verificaPixel (img, N(x,y))  == false && verificaPixel (img, NE(x,y)) == true)
        conectividade++;

if(verificaPixel(img, NE(x,y)) == false && verificaPixel(img, L(x,y)) == true)
    conectividade++;

if(verificaPixel(img, L(x,y)) == false && verificaPixel(img, SE(x,y)) == true)
    conectividade++;

if(verificaPixel(img, SE(x,y)) == false && verificaPixel(img, S(x,y)) == true)
    conectividade++;

if(verificaPixel(img, S(x,y)) == false && verificaPixel(img, SO(x,y)) == true)
    conectividade++;

if(verificaPixel(img, SO(x,y)) == false && verificaPixel(img, O(x,y)) == true)
    conectividade++;

if(verificaPixel(img, O(x,y)) == false && verificaPixel(img, NO(x,y)) == true)
    conectividade++;

if(verificaPixel(img, NO(x,y)) == false && verificaPixel(img, N(x,y)) == true)
    conectividade++;

if(conectividade == 1)
    return true;
else
    return false;

}
int main(void)
{
	struct horse
	{
		int age;
		int height;
		char name[20];
		char father[20];
		char mother[20];
	};

	struct horse My_Horse[50];
	int hcount = 0;
	char text;

	for(;hcount < 50; hcount++)
	{
		
		printf("Do you want to enter details of a%s horse (Y or N)? \n",hcount ? " ":"nother");
		scanf(" %c",&text);
		if(tolower(text) == 'n')
		{
			break;
		}
		else if(tolower(text) == 'y')
		{
			printf("Now you enther details for NO.%d\n",NO(hcount));
		}
		else
		{
			printf("You can only choose one between 'Y' or 'N'.relax and try again.\n");
		}

		printf("Enter the name of the horse:");
		scanf("%s",My_Horse[hcount].name);

		printf("\nEnter the age of the horse:");
		scanf("%d",&My_Horse[hcount].age);

		printf("\nEnter the height of the horse:");
		scanf("%d",&My_Horse[hcount].height);

		printf("\nEnter the name of %s's father:",My_Horse[hcount].name);
		scanf("%s",My_Horse[hcount].father);

		printf("\nEnter the name of %s's mother:",My_Horse[hcount].name);
		scanf("%s",My_Horse[hcount].mother);
	}

	for(int i = 0; i<hcount; i++)
	{
		printf("\n=================\n");
		printf("%s is %d years old, %d hands height,and has %s and %s as parents.",My_Horse[i].name,My_Horse[i].age,My_Horse[i].height,My_Horse[i].father,My_Horse[i].mother);
	}
	printf("\n=================\n");
	return 0;
}
示例#3
0
文件: thinning.cpp 项目: helderc/hIP
void Thinning::Stentiford(QImage *img){

    bool ImagemAlterada = true;

    // define uma estrutura para a máscara
    struct mascara {
    int x;       // coordenada x
    int y;       // coordenada y
    bool verificaCor[9];   // vizinhos ao pixel
    bool apaga;  // flag para marcar se o pixel vai ser deletado
    };

    // copia a imagem original
    QImage *img1 = img;


 // condição de parada: até que a imagem não for alterada (não ter mais pixels removidos)
 while (ImagemAlterada) {

  // declaração de variáveis
     int x, y, n;
     unsigned long int qtPixels = 0;
     uint index=0;

    //percorre imagem e conta pixels pretos
    for (y = 1; y < img1->height(); y++) {
        for (x = 1; x < img1->width(); x++) {
            if( verificaPixel(img1, x, y) )
            qtPixels++;
        }
    }

    // qDebug () << "Pixels: " << qtPixels;

    //  aloca memória para a quantidade de pixels existente
    mascara *mask = new mascara[qtPixels];

    // percorre imagem para definir vizinhos
    for (y = 1; y < img1->height(); y++) {
        for (x = 1; x < img1->width(); x++) {

            // se for um pixel preto
            if( img1->pixel(x,y)== (qRgb(0,0,0)) ) {

                mask[index].x = x;
                mask[index].y = y;
                mask[index].apaga = false;

                // verifica se os pixels vizinhos são pretos

                if( verificaPixel(img1, L(x,y)) )
                mask[index].verificaCor[1] = true;
                else
                mask[index].verificaCor[1] = false;

                if( verificaPixel(img1, SE(x,y)) )
                mask[index].verificaCor[2] = true;
                else
                mask[index].verificaCor[2] = false;

                if( verificaPixel(img1, S(x,y)) )
                mask[index].verificaCor[3] = true;
                else
                mask[index].verificaCor[3] = false;

                if( verificaPixel(img1, SO(x,y)) )
                mask[index].verificaCor[4] = true;
                else
                mask[index].verificaCor[4] = false;

                if( verificaPixel(img1, O(x,y)) )
                mask[index].verificaCor[5] = true;
                else
                mask[index].verificaCor[5] = false;

                if( verificaPixel(img1, NO(x,y)) )
                mask[index].verificaCor[6] = true;
                else
                mask[index].verificaCor[6] = false;

                if( verificaPixel(img1, N(x,y)) )
                mask[index].verificaCor[7] = true;
                else
                mask[index].verificaCor[7] = false;

                if( verificaPixel(img1, NE(x,y)) )
                mask[index].verificaCor[8] = true;
                else
                mask[index].verificaCor[8] = false;

                index++;
                }

        }

    }


    // faz operações para cada uma das máscaras
    for(int M = 1; M <= 4; M++)    {

        for(index = 0; index < qtPixels; index++)  {

        int NumPixelsCorVizinhos = 0, NumConect = 0;
        bool terminal;
        bool status = false;


        // Percorrer a imagem até encontrar um pixel que se encaixe nas máscaras
        switch( M )  {

        case 1:
        // Máscara 1: verifica se pixel superior é branco e se pixel inferior é preto
        if( (!mask[index].apaga) && (mask[index].verificaCor[3] == true) && (mask[index].verificaCor[7] == false))
        status = true;
        break;

        case 2:
        // Máscara2: verifica se pixel esquerdo é branco e se pixel direito é preto
        if( (!mask[index].apaga) && (mask[index].verificaCor[5] == true) && (mask[index].verificaCor[1] == false))
        status = true;
        break;

        case 3:
        // Máscara3: verifica se pixel superior é preto e se pixel inferior é branco
        if( (!mask[index].apaga) && (mask[index].verificaCor[3] == false) && (mask[index].verificaCor[7] == true))
        status = true;
        break;

        case 4:
        // Máscara4: verifica se pixel esquerdo é preto e se pixel direito é branco
        if( (!mask[index].apaga) && (mask[index].verificaCor[5] == false) && (mask[index].verificaCor[1] == true) )
        status = true;
        break;
        }


        if( status ) {

        // verifica se pixel é ponto terminal
            for(n = 1; n <= 8 ; n++) {

                if( mask[index].verificaCor[n] == 1 )
                NumPixelsCorVizinhos++;
            }

            if( NumPixelsCorVizinhos == 1 )
            terminal = true;
            else
            terminal = false;


        // verifica número de conectividade
         for(int temp1 = 1; temp1 <= 8; temp1++) {
            int temp2;

                if(temp1 == 8)
                temp2 = 1;
                else
                temp2 = temp1+1;

                if( (mask[index].verificaCor[temp1] == 0) && (mask[index].verificaCor[temp2] == 1) )
                NumConect++;

            }

             /* se o pixel não é terminal e seu número de
            conectividade é 1, marca este pixel para ser apagado*/
         if( (!terminal) && (NumConect == 1) )

            mask[index].apaga = true;

           }

       }

    }


    ImagemAlterada = false;

            // apaga todos os pixels marcados
            for(index = 0; index < qtPixels; index++) {
                if( mask[index].apaga ) {
                img1->setPixel(QPoint( mask[index].x, mask[index].y), qRgb(255,255,255) );
                ImagemAlterada = true;
                }

               img = img1;
               delete (&mask);

            }


    }

}
示例#4
0
文件: bits.c 项目: bairyn/opencurry
unsigned int no_uint(void)
{
  return NO();
}