2017-09-06 84 views
0

我试图预测MNIST使用的数据集&蟒蛇手写数字手写数字的图像。现在,我必须将已裁剪的图像作为程序的输入。 进一步处理,以使其MNIST数据集格式使用下面的函数完成,但如何自动裁剪作为输入一个随机的形象?蟒蛇 - 裁剪

def imageprepare(argv): 
    """ 
    This function returns the pixel values. 
    The imput is a png file location. 
    """ 
    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 (nheigth == 0): #rare case but minimum is 1 pixel 
      nheigth = 1 
     # resize and sharpen 
     img = im.resize((20,nheight), Image.ANTIALIAS).filter(ImageFilter.SHARPEN) 
     wtop = int(round(((28 - nheight)/2),0)) #caculate horizontal pozition 
     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] 
    return tva 

回答

0

您可以使用OpenCV的轮廓,你的实际图像中找出潜在的数字,一些技术将取决于你是从工作实际数据。有一个在http://www.pyimagesearch.com/2017/02/13/recognizing-digits-with-opencv-and-python/ 位候选者位置的一个例子,可以给你一些指点。

不过,我认为,虽然在欧洲所有的脚本每个数字应该是连续的,不同的,我不知道这两个点适用于所有的脚本你可能会得到一些脚本的问题。