Информация об изменениях

Сообщение профи или упоротый от 19.02.2015 1:56

Изменено 19.02.2015 2:22 jyuyjiyuijyu

goto? не, не слышал

bool AntiCaptcha::Analyse()
{
    // Differentiate between background and foreground
    for(unsigned int y = 0; y < height; ++y)
    {
        for(unsigned int x = 0; x < width; ++x)
        {
            if(image->pixels[y][x][0] >= 160 && image->pixels[y][x][1] >= 160
                    && image->pixels[y][x][2] >= 160)
            {
                image->pixels[y][x][0] = 0xFF;
                image->pixels[y][x][1] = 0xFF;
                image->pixels[y][x][2] = 0xFF;
            }
            else
            {
                image->pixels[y][x][0] = 0x00;
                image->pixels[y][x][1] = 0x00;
                image->pixels[y][x][2] = 0x00;
            }
        }
    }

    // Compare vectors with image
    unsigned int xa, ya;

    bool found = true;
    int nr = -1;
    int deg = 0;

    for(int digit = 0; digit < numDigits; ++digit)
    {
        for(unsigned int y = 0; y < height; ++y)
        {
            for(unsigned int x = 0; x < width; ++x)
            {

                for(deg = 0; deg < 11; ++deg)
                {
                    xa = x;
                    xout = x;
                    ya = y;
                    yout = y;

                    found = true;

                    for(int i = 0; i < lenDigits[digit]; ++i)
                    {
                        xa += transformed[digit][deg][i].first;
                        ya += transformed[digit][deg][i].second;

                        if(xa < 0 || xa >= width || ya < 0 || ya >= height)
                        {
                            found = false;
                            break;
                        }

                        if(!image->pixels[ya][xa][0] == 0x00)
                        {
                            found = false;
                            break;
                        }
                    }

                    if(found)
                    {
                        break;
                    }

                }

                if(found)
                {
                    break;
                }
            }

            if(found)
            {
                break;
            }
        }

        if(found)
        {
            nr = digit;
            break;
        }
    }

    // Mark detected digit
    if(nr != -1)
    {
        xa = xout;
        ya = yout;

        for(int i = 0; i < lenDigits[nr]; ++i)
        {
            xa += transformed[nr][deg][i].first;
            ya += transformed[nr][deg][i].second;

            image->pixels[ya][xa][0] = 0xFF;

        }
    }

    if(nr == -1)
    {
        return false;
    }

    // Select random point of digit
    int vec = random(0,lenDigits[nr]);
    for(int i=0; i < vec; ++i)
    {
        xout += transformed[nr][deg][i].first;
        yout += transformed[nr][deg][i].second;
    }

    return true;
}


http://code.openhub.net/file?fid=9oMbPGRjiHXzJk2ZONWnFQIOXsQ&amp;cid=82UJLvWRvRg&amp;s=
профи или упоротый
goto? не, не слышал

bool AntiCaptcha::Analyse()
{
    // Differentiate between background and foreground
    for(unsigned int y = 0; y < height; ++y)
    {
        for(unsigned int x = 0; x < width; ++x)
        {
            if(image->pixels[y][x][0] >= 160 && image->pixels[y][x][1] >= 160
                    && image->pixels[y][x][2] >= 160)
            {
                image->pixels[y][x][0] = 0xFF;
                image->pixels[y][x][1] = 0xFF;
                image->pixels[y][x][2] = 0xFF;
            }
            else
            {
                image->pixels[y][x][0] = 0x00;
                image->pixels[y][x][1] = 0x00;
                image->pixels[y][x][2] = 0x00;
            }
        }
    }

    // Compare vectors with image
    unsigned int xa, ya;

    bool found = true;
    int nr = -1;
    int deg = 0;

    for(int digit = 0; digit < numDigits; ++digit)
    {
        for(unsigned int y = 0; y < height; ++y)
        {
            for(unsigned int x = 0; x < width; ++x)
            {

                for(deg = 0; deg < 11; ++deg)
                {
                    xa = x;
                    xout = x;
                    ya = y;
                    yout = y;

                    found = true;

                    for(int i = 0; i < lenDigits[digit]; ++i)
                    {
                        xa += transformed[digit][deg][i].first;
                        ya += transformed[digit][deg][i].second;

                        if(xa < 0 || xa >= width || ya < 0 || ya >= height)
                        {
                            found = false;
                            break;
                        }

                        if(!image->pixels[ya][xa][0] == 0x00)
                        {
                            found = false;
                            break;
                        }
                    }

                    if(found)
                    {
                        break;
                    }

                }

                if(found)
                {
                    break;
                }
            }

            if(found)
            {
                break;
            }
        }

        if(found)
        {
            nr = digit;
            break;
        }
    }

    // Mark detected digit
    if(nr != -1)
    {
        xa = xout;
        ya = yout;

        for(int i = 0; i < lenDigits[nr]; ++i)
        {
            xa += transformed[nr][deg][i].first;
            ya += transformed[nr][deg][i].second;

            image->pixels[ya][xa][0] = 0xFF;

        }
    }

    if(nr == -1)
    {
        return false;
    }

    // Select random point of digit
    int vec = random(0,lenDigits[nr]);
    for(int i=0; i < vec; ++i)
    {
        xout += transformed[nr][deg][i].first;
        yout += transformed[nr][deg][i].second;
    }

    return true;
}


тыц