Загрузить изображение с помощью модуля PIL - PullRequest
0 голосов
/ 19 марта 2020

Я занимаюсь вопросом повышения контрастности изображения. Посмотрите на следующий фрагмент кода

# this is a test cell
@exit_after(4)
def testContrastSharpening():
    # load an image
    i0 = loadImage('Data/bokehCircular.jpg', 100)

    # run student code
    s0 = contrastSharpen(i0, 3, 0.5)

    # collect test data
    rTest = s0[:, int(i0.shape[1]/2), 0]
    gTest = s0[:, int(i0.shape[1]/4), 1]
    bTest = s0[int(i0.shape[0]/5), :, 2]

    # load and compare to reference result
    l0 = load('Data/t0.npz')

    return allclose(rTest, l0['r']) and allclose(gTest, l0['g']) and allclose(bTest, l0['b'])

try:
    assert(testContrastSharpening())
    print('Contrast sharpening seems to work!')
except:
    raise Exception("Contrast sharpening is not working... please try again...")

i0 = loadImage ('Data / bokehCircular.jpg', 100) Эта строка кода вызывает предварительно написанную функцию для загрузки изображение, эта функция указана ниже

def loadImage(path, scale):
    image = Image.open(path, mode = 'r')
    image = image.resize((int(image.width * scale / 100), int(image.height * scale / 100)), resample=Image.LANCZOS)
    image = array(image.getdata()).reshape(image.size[1], image.size[0], 3)
    image = image.astype(float)
    image = image / max(image)

    return image

когда я запускаю код, я получаю сообщение об ошибке в следующей строке image = image.astype (float) Ошибка приведена ниже

KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-8-bf381c328e33> in <module>
     20 try:
---> 21     assert(testContrastSharpening())
     22     print('Contrast sharpening seems to work!')

<ipython-input-1-4c3172e491d3> in inner(*args, **kwargs)
     44             try:
---> 45                 result = fn(*args, **kwargs)
     46             finally:

<ipython-input-8-bf381c328e33> in testContrastSharpening()
      4     # load an image
----> 5     i0 = loadImage('Data/bokehCircular.jpg', 100)
      6 

<ipython-input-3-545d6e0c0f38> in loadImage(path, scale)
      5     image = array(image.getdata()).reshape(image.size[1], image.size[0], 3)
----> 6     image = image.astype(float)
      7     image = image / max(image)

KeyboardInterrupt:

Я написал код для повышения контрастности изображения и проверил его отдельно, загрузив изображение через ту же функцию LoadImage, но в приведенном выше случае функция LoadImage не работает должным образом. Помогите, если кто-то может, спасибо

1 Ответ

0 голосов
/ 19 марта 2020

Я думаю, это из-за вашего декоратора @exit_after(4). В самом деле, используя @exit_after(4) через 4 секунды, ваша тестовая ячейка будет остановлена ​​из-за ошибки KeyboardInterrupt.

Из исходного кода @exit_after()

def exit_after(s):
   '''
   use as decorator to exit process if 
   function takes longer than s seconds
   '''

Существует два решения:

  • Изменить тест: Сделать ваш тест более терпимым и увеличить это число? например, @exit_after(10), чтобы увидеть, работает ли это.
  • Измените ваш скрипт: Сделайте ваши функции быстрее, чтобы они работали с учетом ограничения в 4 секунды. Вы можете начать с того, что сделаете функции почти пустыми и убедитесь, что они работают.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...