2015-06-29 6 views
-4

"> =" кажется, не работает. Когда fixedx = 100 и len (img [0]) равно 100, код не выполняет оператор печати и не меняет значение fixedx на 99Почему> = оценка не работает Python

Обе переменные являются целыми числами. Есть ли другой способ сделать сравнение в python?

single_sm.jpg - это файл 100x125 jpg. Таким образом, длина (IMG) = 125, Len (IMG [0]) = 100.

Запуск сценария ниже продуктов:

Traceback (самый последний вызов последнего):

Файл "shrink.py" , строка 69, в

changed_img = термоусадочные (пикс, 0, 81, 25, 20, downsp)

Файл "shrink.py", строки 37, в термоусадочный

результат [I, J ] = img [fixedx, fixedy]

IndexError: индекс 100 находится вне границ для оси 1 с размером 100

from PIL import Image 
import numpy as np 
import math 

def shrink(img, x, y, size, scale, downsp): 

    result = np.zeros((scale, scale, 3), dtype=np.uint8) 
    scale_factor = math.floor(size/scale) 
    for i in xrange(scale): 
     for j in xrange(scale): 

      fixedx = int(i*scale_factor+x) 
      fixedy = int(j*scale_factor+y) 

      if fixedx >= (len(img[0]) - 1): 
       print "in this step" 
       fixedx = len(img[0]) - 1 
      if fixedy >= (len(img) - 1): 
       fixedy = len(img) - 1 

      result[i,j] = img[fixedx, fixedy] 
    return result 

if __name__ == '__main__': 

    img = Image.open("imgs/single_sm.jpg") 
    pix = np.array(img) 
    downsp = True 
    changed_img = shrink(pix, 0, 81, 25, 20, downsp) 
    changed_img = np.array(changed_img) 
    resized = Image.fromarray(changed_img, 'RGB') 
    resized.save('downsp.jpg') 
+4

Этот сниппет должен работать нормально. Нам нужно посмотреть, что такое img [0] и какое фиксированное x назначено. – t3dodson

+0

Невозможно воспроизвести. Проблема в другом месте. – Sinkingpoint

+0

Можете ли вы выполнить 'print x, type (fixedx)' и 'print len ​​(img [0])' перед операциями 'if'? – vk1011

ответ

1

Ошибка говорит:

IndexError: index 100 is out of bounds for axis 1 with size 100 

Поскольку ось 1 представляет собой второе измерение массива (fixedy, не fixedx), это означает, что значение массива отличается тем, что вы ожидаете. Таким образом, вывод состоит в том, что массив имеет 125x100 пикселей (и фактически это именно то, что вы говорите: len(img) = 125, len(img[0]) = 100), а не 100x125.

Чтобы подтвердить это, я попробовал вашу программу, заменив изображение простым массивом нулей 125x100 и показал то же сообщение об ошибке, что и ваш. Затем я попробовал его с массивом 100x125, и он сработал.