简体   繁体   中英

To fix an error 'numpy.ndarray' object has no attribute 'convert'

I applied Image deconvolution using an unsupervised wiener algorithm and increased the sharpness and contrast on a specific dataset. But I faced an error while compiling the code. It shows AttributeError: 'numpy.ndarray' object has no attribute 'convert'. How to fix it? My code is given below -

import cv2
import glob
from matplotlib import pyplot as plt
from skimage import io, color, restoration, img_as_float
import scipy.stats as st
import numpy as np
from PIL import Image
from PIL import ImageEnhance

all_img = glob.glob('input/*.png')
other_dir = 'output/'

for img_id, img_path in enumerate(all_img):
    img = img_as_float(io.imread(img_path,0))

    def gkern(kernlen=21, nsig=2):   
        lim = kernlen//2 + (kernlen % 2)/2
        x = np.linspace(-lim, lim, kernlen+1)
        kern1d = np.diff(st.norm.cdf(x))
        kern2d = np.outer(kern1d, kern1d)
        return kern2d/kern2d.sum()

    psf = gkern(5,3)   

    deconvolved, _ = restoration.unsupervised_wiener(img, pdf)

    # Applied Sharpness and contrast
    enhancer_object = ImageEnhance.Contrast(deconvolved)
    out = enhancer_object.enhance(1.4)
    enhancer = ImageEnhance.Sharpness(out)
    enhanced_im = enhancer.enhance(8.0)  
    enhanced_cv_im = np.array(enhanced_im)

    cl2 = cv2.resize(enhanced_cv_im, (512,512), interpolation = cv2.INTER_CUBIC)
    plt.imsave(f"output/unsupervised_wiener_{img_id}.png", cl2, cmap='gray')

It shows the error-

runfile('C:/Users/Junaed/.spyder-py3/unsupervised_wiener.py', wdir='C:/Users/Junaed/.spyder-py3')
Traceback (most recent call last):

  File "C:\Users\Junaed\.spyder-py3\unsupervised_wiener.py", line 37, in <module>
    enhancer_object = ImageEnhance.Contrast(deconvolved)

AttributeError: 'numpy.ndarray' object has no attribute 'convert'

ImageEnhance.Contrast() is expecting a PIL image which it can run image.convert on but you passed it a numpy array. To convert to PIL you can do this

from PIL import Image
import numpy 

im = Image.fromarray(numpy.uint8(deconvolved))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM