Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (14)

Наибольший вклад в теги

Все теги (76)

Лучшие ответы пользователя

Все ответы (64)
  • Синхронизация папок Python на разных компьютерах?

    Я бы советовал использовать virtualenv + requirements.txt и не думать про синхрогнизацию.
    Ответ написан
  • Как из изображения графика вытащить координаты?

    Если быстро и на коленке то:
    1) подготавливаем специальным образом изображения удаляя ненужныю информацию:



    и



    2) получаем значения граничных линий сетки, цвета сетки и графиков для подготовленных изображений:
    по x: 10 и 10000, по y: -25 и 10, сетка rgb(221,221,221), график rgb(0,0,255)
    по x: 30 и 10000, по y: 90 и 132, сетка rgb(104,104,104), график rgb(150,255,0)

    3) на питоне с помощью PIL пишем код который будет получать по предоставленным данным координаты:
    # -*- coding: utf-8 -*-
    
    from math import log10, fabs
    import Image
    
    
    def check_pixel_colour(pixel, colour, delta=(0,0,0)):
        '''сравниваем цвет пиксиля с эталонным цветом с погрешностью дельта'''
        return (colour[0] - delta[0]) <= pixel[0] <= (colour[0] + delta[0]) and\
               (colour[1] - delta[1]) <= pixel[1] <= (colour[1] + delta[1]) and\
               (colour[2] - delta[2]) <= pixel[2] <= (colour[2] + delta[2])
    
    
    def better_colour_value(pixels, colour):
        '''из списка цветов выбираем более подходящий эталонному цвету'''
        delta = 1024
        better_pixel = None
        for pixel in pixels:
            current_delta = fabs(pixel[0] - colour[0]) +\
                            fabs(pixel[1] - colour[1]) +\
                            fabs(pixel[2] - colour[2])
            if current_delta < delta:
                delta = current_delta
                better_pixel = pixel
        return better_pixel
    
    
    def get_border_grids(image, grid_colour):
        '''
        получаем номера пиксилей по оси x первой и последней линий сетки, по оси y верхней и нижней
        данные пиксили соответствуют переданным граничным значениям сетки
        '''
        width, height = image.size
        for x in xrange(width):
            if check_pixel_colour(image.getpixel((x, 0)), grid_colour):
                yield x
                break
        for x in xrange(width - 1, -1, -1):
            if check_pixel_colour(image.getpixel((x, 0)), grid_colour):
                yield x
                break
        for y in xrange(height - 1, -1, -1):
            if check_pixel_colour(image.getpixel((0, y)), grid_colour):
                yield y
                break
        for y in xrange(height):
            if check_pixel_colour(image.getpixel((0, y)), grid_colour):
                yield y
                break
    
    
    def get_linear_value(x, x1, x2, x1_value, x2_value):
        '''получаем значение для текущего пикселя с учетом граничных значений сетки для линейной оси'''
        k = (x2 - x1) / (x2_value - x1_value)
        b = x1 - k * x1_value
        return (x - b) / k
    
    
    def get_log_value(x, x1, x2, x1_value, x2_value):
        '''получаем значение для текущего пикселя с учетом граничных значений сетки для логорифмической оси'''
        k = (x1 - x2) / (log10(x1_value) - log10(x2_value))
        b = x1 - k * log10(x1_value)
        return 10**((x - b) / k)
    
    
    def process_graph(image_path, x1_value, x2_value, y1_value, y2_value, colour, delta, grid_colour):
        '''получаем список координат графика на изображении'''
        image = Image.open(image_path)
        width, height = image.size
        x1, x2, y1, y2 = get_border_grids(image, grid_colour)
        coordinates = []
    
        for x in xrange(width):
            pixels = {}
            for y in xrange(height):
                pixel = image.getpixel((x, y))
                if check_pixel_colour(pixel, colour, delta):
                    pixels[pixel] = y
            if len(pixels) > 0:
                y = pixels[better_colour_value(pixels.keys(), colour)]
                x_value = get_log_value(x, x1, x2, x1_value, x2_value)
                y_value = get_linear_value(height - y, height - y1, height - y2, y1_value, y2_value)
                coordinates.append((x_value, y_value))
    
        return coordinates
    
    
    if __name__ == '__main__':
        print process_graph('test_001.png', 10., 10000., -25., 10., (0,0,255), (10,10,50), (221,221,221))
        print process_graph('test_002.png', 30., 10000., 90., 132., (150,255,0), (50,50,10), (104,104,104))
    
    


    4) запускаем программу и получаем результаты для каждого пикселя по ox
    Ответ написан
  • Что разрабатываю Java и .NET программисты?

    Сперва нужно сказать, что хорошие специалисты пишущие на java, .net или другом языке всегда востребованы, но Вам как я понял до этого еще нужно дойти. Поэтому лучше выбирать то к чему лежит душа :)

    Если Вам хочется писать веб, то лучше попробовать python или ruby и еще java script.
    Если Вам хочется писать системные утилиты, алгоритмы, то лучше поробовать C или C++.
    Если Вам хочется писать под мобильные системы, то можно выбирать между java, objective-C, .net (можно также подумать о java script, но совет спорный).
    Если Вам хочется писать игры, здесь я ничего не подскажу.
    Если Вам хочется писать десктопные приложения, то лучше попробовать C++, .net (только венда).
    Если Вам хочется сидеть не на венде и писать не только под венду, то лучше не думать о .net.

    По поводу IDE: у java есть eclipse, net beans, но я бы посоветовал idea (особенно когда Вы не видите жизни без решарпера под вижлу). Кстати все эти IDE написаны на java.

    По поводу использования: понятно что .net широко использует microsoft, java же использует, например, google. Но должен дать замечание, что на обоих этих языках широко пишут «некоторые» аутсорсинговые компании так называемые enterprise приложения (вероятно большинство вакансий именно их) код которых возможно бывал в руках некоторых индуских племен или морально устарел.

    Стоит отметить, что два языка достаточно похожи, особенно учитывая, что многие популярные библиотеке существуют как для java так и для .net.

    Поэтому еще раз посоветую выбирать то, к чему больше лежит душа. Например мне сперва нравилась java и я начинал изучать ее, но потом пришлось работать с .net, а сейчас я перехожу на python. Или же найдите компанию, где хотите работать (и/или где есть большая вероятность быть принятым на работу), узнайте на чем пишут там. Возможно также не стоит ограничиваться только java и .net. В любом случае если усердно работать и развиваться, то выбор языка по сути не имеет значения.
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (8)