Как избежать SIGSEGV в интерактивной консоли Python? - PullRequest
0 голосов
/ 28 марта 2019

Я использовал itk для загрузки файла 3d-тома и получил любопытную ошибку, но только если я запускал код с Запускать с помощью консоли Python , отмеченной в разделе Запуск конфигурации в PyCharm. (Это запускает программу в консоли Python, что очень удобно, если для доступа к переменным после запуска программы.)

import itk

def read_the_image(file_path):
    global image
    itk_image = itk.imread(file_path)
    image = itk.GetArrayViewFromImage(itk_image)
    return image

if __name__ == '__main__':
    read_the_image("./t0.mha")

Я также заметил, что оператор global вносит свой вклад (без этого он тоже работает нормально). Это также происходит только с определенными типами изображений: хотя это не происходит с .png s, это происходит с .mha s. Вы можете найти пример такого файла в этом учебном архиве (проекта на sourceforge).

Так что я хотел бы понять, почему это происходит в интерактивной консоли Python и что я мог сделать, чтобы избежать этого.

1 Ответ

0 голосов
/ 28 марта 2019

Я нашел решение, которое позволяет избежать этой ошибки, но я до сих пор не понимаю, почему она вообще возникла. Ключ копирует данные в новое изображение:

import itk
import numpy as np

def read_the_image(file_path):
    global image
    itk_image = itk.imread(file_path)
    image = np.copy(itk.GetArrayViewFromImage(itk_image))
    return image

if __name__ == '__main__':
    image = 3
    read_the_image("./t0.mha")

Я полагаю, что массив, который мы получаем из itk.GetArrayViewFromImage, обращается к какому-либо ресурсу, который должен быть надлежащим образом закрыт до завершения программы, что может не произойти при запуске в интерактивной консоли python. (?) Но я до сих пор понятия не имею почему это происходит с этим конкретным форматом.

...