-2

I am trying to load my own hand written images and test them in my MNIST model. But, i need to pre process the images first. I have 100 images, 10 of every 10 digits saved on the folder images. I am getting error and i don't know if this code works. Any help?

import cv2
from os import listdir
from os.path import isfile, join
import numpy as np
from PIL import Image
from scipy import ndimage
import math
def loadImages(path):

    imagesList = listdir(path)
    loadedImages = []
    for image in imagesList:
        gray = cv2.imread("image", cv2.CV_LOAD_IMAGE_GRAYSCALE)
        gray = cv2.resize(255-gray, (28, 28))
        (thresh, gray) = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
        while np.sum(gray[0]) == 0:
            gray = gray[1:]
        while np.sum(gray[:,0]) == 0:
            gray = np.delete(gray,0,1)
        while np.sum(gray[-1]) == 0:
            gray = gray[:-1]
        while np.sum(gray[:,-1]) == 0:
            gray = np.delete(gray,-1,1)
        rows,cols = gray.shape
        if rows > cols:
            factor = 20.0/rows
            rows = 20
            cols = int(round(cols*factor))
            gray = cv2.resize(gray, (cols,rows))
        else:
            factor = 20.0/cols
            cols = 20
            rows = int(round(rows*factor))
            gray = cv2.resize(gray, (cols, rows))
        colsPadding = (int(math.ceil((28-cols)/2.0)),int(math.floor((28-cols)/2.0)))
        rowsPadding = (int(math.ceil((28-rows)/2.0)),int(math.floor((28-rows)/2.0)))
        gray = np.lib.pad(gray,(rowsPadding,colsPadding),'constant')
        shiftx,shifty = getBestShift(gray)
        shifted = shift(gray,shiftx,shifty)
        gray = shifted
        loadedImages.append(gray)
    return loadedImages

def getBestShift(img):
    cy,cx = ndimage.measurements.center_of_mass(img)
    rows,cols = img.shape
    shiftx = np.round(cols/2.0-cx).astype(int)
    shifty = np.round(rows/2.0-cy).astype(int)
    return shiftx,shifty
path = 'images/'

def shift(img,sx,sy):
    rows,cols = img.shape
    M = np.float32([[1,0,sx],[0,1,sy]])
    shifted = cv2.warpAffine(img,M,(cols,rows))
    return shifted
imgs = loadImages(path)
rgb=np.array(imgs)

Error:AttributeError: module 'cv2.cv2' has no attribute 'CV_LOAD_IMAGE_GRAYSCALE'

emma19
  • 47
  • 3
  • 1
    Possible duplicate of [Unable to use flags in opencv Python?](https://stackoverflow.com/questions/16696251/unable-to-use-flags-in-opencv-python) – Dmitrii Z. Feb 26 '18 at 20:01

1 Answers1

0

According to this link

Read image grayscale opencv 3.0.0-dev

So, you need to run this script in python 2.4 (I guess) or change flag names according to your current python version