Я столкнулся с некоторыми проблемами для улучшения на нескольких изображениях, используя Python, он показывает некоторые ошибки - PullRequest
1 голос
/ 28 апреля 2020

Здесь я хочу изменить стандартную резкость набора данных изображения. Он отлично работает для одного изображения, но когда я применяю его к нескольким изображениям, он показывает ошибку типа AttributeError: 'numpy .ndarray' объект не имеет атрибута 'filter' . Что я должен сделать, чтобы это исправить? Для этого мой код приведен ниже -

from PIL import Image
from PIL import ImageEnhance
import cv2
import glob

dataset = glob.glob('input/*.png')
other_dir = 'output/'
for img_id, img_path in enumerate(dataset):
    img = cv2.imread(img_path,0)

    enhancer = ImageEnhance.Sharpness(img)
    enhanced_im = enhancer.enhance(8.0)

    cl2 = cv2.resize(enhanced_im, (1024,1024), interpolation = cv2.INTER_CUBIC)
    cv2.imwrite(f'{other_dir}/enhanced_{img_id}.png',cl2)

1 Ответ

1 голос
/ 28 апреля 2020

Вы пытаетесь использовать PIL для улучшения массива numpy. cv2 преобразует изображения из контуров изображений в numpy массивы. Это не работает с PIL операциями с изображениями.

Вы можете загрузить изображение с помощью PIL, выполнить улучшения PIL, а затем преобразовать его в массив numpy для передачи в cv2.resize() Метод.

Попробуйте:

from PIL import Image
from PIL import ImageEnhance
import cv2
import glob
import numpy as np

dataset = glob.glob('input/*.png')
other_dir = 'output/'
for img_id, img_path in enumerate(dataset):
    img = Image.open(img_path)  # this is a PIL image

    enhancer = ImageEnhance.Sharpness(img)  # PIL wants its own image format here
    enhanced_im = enhancer.enhance(8.0)  # and here
    enhanced_cv_im = np.array(enhanced_im) # cv2 wants a numpy array

    cl2 = cv2.resize(enhanced_cv_im, (1024,1024), interpolation = cv2.INTER_CUBIC)
    cv2.imwrite(f'{other_dir}/enhanced_{img_id}.png',cl2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...