python - 裁剪手写数字的图像

Posted

技术标签:

【中文标题】python - 裁剪手写数字的图像【英文标题】:python - Cropping an image of handwritten digit 【发布时间】:2017-09-06 04:53:37 【问题描述】:

我正在尝试使用 MNIST 作为数据集和 python 来预测手写数字。现在,我必须将已经裁剪的图像作为程序的输入。 使用以下函数完成进一步处理以使其成为 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

【问题讨论】:

【参考方案1】:

您可以使用 OpenCV 轮廓来定位实际图像中的潜在数字,其中一些技术将取决于您使用的实际数据。 http://www.pyimagesearch.com/2017/02/13/recognizing-digits-with-opencv-and-python/ 有一个数字候选位置的示例 这可以给你一些指导。

但是,您可能会在使用某些脚本时遇到问题,因为我认为在所有欧洲脚本中,每个数字都应该是连续且不同的,但我不确定这两点是否适用于所有脚本。

【讨论】:

以上是关于python - 裁剪手写数字的图像的主要内容,如果未能解决你的问题,请参考以下文章

带有opencv的手写数字边界框

如何从 python 中的图像(或 pdf 文件)中提取名称和手写数字?

10个适合新手的人工智能项目 - 02手写数字识别:使用Python和机器学习算法,编写一个手写数字识别程序,能够识别手写数字图像并将其转换为数字。

手写体数字图像聚类实验代码怎么写

Python 3 生成手写体数字数据集

[图像识别]-离线识别手写数字