-1

I have a 100 images, each 10 for every digit and i am trying to convert it like MNIST images in python. But, constantly i am getting an error. Error is posted down!

   from PIL import Image, ImageFilter
from os import listdir


def imageprepare(argv):
    """
    This function returns the pixel values.
    The imput is a png file location.

    """
    imagesList = listdir(argv)

    for image in imagesList:
        im = Image.open(argv).convert('L')
        width = float(im.size[0])
        height = float(im.size[1])
        newImage = Image.new('L', (28, 28), (255))  # creates white canvas of 28x28 pixels

        if width > height:  # check which dimension is bigger
        # Width is bigger. Width becomes 20 pixels.
            nheight = int(round((20.0 / width * height), 0))  # resize height according to ratio width
            if (nheight == 0):  # rare case but minimum is 1 pixel
                nheight = 1
            # resize and sharpen
            img = im.resize((20, nheight), Image.ANTIALIAS).filter(ImageFilter.SHARPEN)
            wtop = int(round(((28 - nheight) / 2), 0))  # calculate horizontal position
            newImage.paste(img, (4, wtop))  # paste resized image on white canvas
        else:
        # Height is bigger. Heigth becomes 20 pixels.
            nwidth = int(round((20.0 / height * width), 0))  # resize width according to ratio height
            if (nwidth == 0):  # rare case but minimum is 1 pixel
                nwidth = 1
            # resize and sharpen
            img = im.resize((nwidth, 20), Image.ANTIALIAS).filter(ImageFilter.SHARPEN)
            wleft = int(round(((28 - nwidth) / 2), 0))  # caculate vertical pozition
            newImage.paste(img, (wleft, 4))  # paste resized image on white canvas

    # newImage.save("sample.png

        tv = list(newImage.getdata())  # get pixel values

    # normalize pixels to 0 and 1. 0 is pure white, 1 is pure black.
        tva = [(255 - x) * 1.0 / 255.0 for x in tv]
        print(tva)
        return tva
argv= 'images/'
x=imageprepare(argv)#file path here
print(len(x))# mnist IMAGES are 28x28=784 pixels

error: File "C:/Users/lenovo/.spyder-py3/Project1/test12.py", line 47, in x=imageprepare(argv)#file path here

File "C:/Users/lenovo/.spyder-py3/Project1/test12.py", line 14, in imageprepare im = Image.open(argv).convert('L')

File "C:\Users\lenovo\Anaconda3\lib\site-packages\PIL\Image.py", line 2477, in open fp = builtins.open(filename, "rb")

PermissionError: [Errno 13] Permission denied: 'images/'

emma19
  • 57
  • 2
  • 7
  • Just start your program with admin privileges and see if that helps. In this case if you are running the thing from anaconda prompt, right click "Anaconda Prompt" in start menu, and select "Run as administrator". Also consider reinstalling anaconda, only for current user. – kchak Feb 26 '18 at 07:37

1 Answers1

0

From the log above, it seems that you have no permission on folder images/ which has been passed as an argument to function imageprepare. Have you tried to change the access privileges of images? Or just run this from prompt as Administrator.

Alex Lee
  • 309
  • 3
  • 11