在机器学习手写数字识别案例中,需要将手写数字图片转矩阵向量。其实转矩阵,就需要根据图片上像素点来组成一个矩阵,如果把图片看作一个 长*宽 的二维矩阵,那么矩阵中的每个点的像素表示的数字组成一个新的矩阵。

    一般图片我们会将他转灰度图,整个图片就由数字和空白组成,这样就好取像素值了。

    下面介绍两种办法将手写数字图片转矩阵:

     原始图片:

    代码一:

import numpy as np
from PIL import Image
img = Image.open('number6.png')
img = img.resize((32,32))
img = img.convert("L")

img_new = img.point(lambda x:0 if x> 170 else 1)
arr = np.array(img_new)
for i in range(arr.shape[0]):
    print(arr[i])

   运行结果:

 

    这种方式,直接打印的是每一组向量,而不是字符串的形式。 

    代码二: 

from PIL import Image
img = Image.open('number6.png')
img = img.resize((32,32))
img = img.convert("L")


width,height = img.size
for i in range(height):
    for j in range(width):
        color = img.getpixel((j,i))
        if(color>170):
            print('0',end=' ')
        else:
            print('1',end=' ')
    print()

    运行结果:

 

      以上两种方式其实就是两个方法img.point()和img.getpixcel()的区别,他们参数不同,最终的结果都是将图片像素点转为数字,然后存储为新的矩阵。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐