Загрузка собственного набора данных, такого как изображения MNIST

Я пытаюсь загрузить свои собственные рукописные изображения и протестировать их в своей модели MNIST. Но сначала мне нужно предварительно обработать изображения. У меня есть 100 изображений, 10 из каждых 10 цифр, сохраненных в изображениях папки. Я получаю сообщение об ошибке, и я не знаю, работает ли этот код. Любая помощь?

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)

Ошибка: AttributeError: модуль «cv2.cv2» не имеет атрибута «CV_LOAD_IMAGE_GRAYSCALE»


person emma19    schedule 26.02.2018    source источник
comment
Возможный дубликат Невозможно использовать флаги в opencv Python?   -  person Dmitrii Z.    schedule 26.02.2018


Ответы (1)


По этой ссылке

Чтение изображения в оттенках серого opencv 3.0.0-dev

Итак, вам нужно запустить этот скрипт в python 2.4 (я думаю) или изменить имена флагов в соответствии с вашей текущей версией python.

person Maha Veer    schedule 28.02.2018