Я пытаюсь предварительно обработать изображения для тензорного потока, однако я просто не могу получить тот же результат с PIL
, как это делается с pycimg
.
Идея состоит в том, чтобы удалить фоновые тени с изображения путем вычитания самого размытого изображения следующим образом.
С pycimg
вычитание успешно, но не может сохранить (???) с PIL
, результат не удовлетворяет.
Довольно запутался и застрял здесь. Пожалуйста, помогите.
исходное изображение
целевое изображение (сделано pycimg
)
размытое изображение
изображение сделано PIL
from pycimg import CImg as cimg
from tensorflow.keras.preprocessing.image import load_img, img_to_array
from PIL import ImageFilter, Image
import numpy as np
# %% cimg method
img = cimg(r'bird.png')
img_copy = cimg(r'bird.png')
img.show()
# making blured image
img_blur = cimg.blur(img_copy, sigma=15)
# if use `img` directly, the cimg.blur changes the original image also, that makes everything black, so have to make a copy.
img_diff = img.__sub__(img_blur)
img_diff.display()
img_diff.save(r'bird_diff.jpg') # this works
img_blur.save(r'bird_diff.png') # this also works
img_diff.save(r'D:\test\bird_diff.png') # fails and gives err msg of `Process finished with exit code -1073741819 (0xC0000005)`
Затем я возвращаюсь к PIL, с GaussianBlur, я могу сделать тот же процесс, но результат совершенно другой и бесполезный для меня.
# %%
img_pil = load_img(r'bird.png')
img_pil_blur = img_pil.filter(ImageFilter.GaussianBlur(radius=15))
img_sub = np.asarray(img_pil) - np.asarray(img_pil_blur)
img_sub_arr = Image.fromarray(img_sub)
img_sub_arr.show()
А вот и несколько квестов.
Как я могу получить такой же результат с помощью PIL, как это делает pycimg? по-видимому, для tenorflow взять PIL по умолчанию, не знаю, работает ли он с pycimg.
, если PIL не работает, как я могу изменить формат pycimg на формат PIL? формат совсем другой. пробовал reshape
& move.axis
.
Большое спасибо.