Я пытаюсь добавить изображение, обработанное scikit-image и scipy, в графический интерфейс пользователя tkinter. Чтобы добавить его на холст, его нужно либо сохранить в формате png, либо преобразовать в PIL
изображение. Однако, когда я пытаюсь использовать ImageTk
Image.fromarray()
, это сильно искажает изображение. Я бы предпочел не сохранять его как png, потому что это всего лишь промежуточный шаг для создания меток данных.
Я попытался проверить формы массивов, и они одинаковы. Я попытался распечатать изображения, и заполненные объекты - это правильное изображение, а im
искажено. Так что это не проблема в интерфейсе Tkinter. Кроме того, если я не использую np.asarray()
, он выдает тот же результат.
def generateCanny(imageName):
#imagename should be a path to the image, created with os path join
img = skimage.io.imread(imageName)
print('orig {}'.format(img.shape))
gray = np.sqrt((img*img).sum(-1))
#converts the image to greyscale
edges = skimage.feature.canny(gray, sigma=3)
fill = scipy.ndimage.binary_fill_holes(edges)
return fill
imageName = os.path.join(imagePath, imageStr)
filled_objects = generateCanny(imageName)
a = np.asarray(filled_objects)
im = PIL.Image.fromarray(a)
Вот два изображения, im
слева и filled_objects
справа
![scikit to PIL image conversion distortion](https://i.stack.imgur.com/7RYOi.png)
Я бы подумал, что вы могли бы просто конвертировать его, потому что filled_objects
- это просто массив, но Image.fromarray()
должен выполнять некоторую обработку.