使用PIL库获取图片的二进制/01文本

前言

今天看了看KNN算法的手写数字识别,想着自己能不能创造个数据,试试看能不能识别。然后我去网上百度如何获得图片的01文本。发现很多代码效果不是很好,然后就有了今天这篇博客。

本文需要安装pillow库,安装的命令很简单。

cmd模式
pip install pillow
conda模式 
conda install -n 环境名 pillow

正文

首先,我们知道图片的RGB每个的值最大都是255。然后PIL库的Image库有个函数getpixel(),这个函数会返回当前图片像素点的像素值,返回值为一个列表。

getpixel()的使用方法

我们可以看到源码中注释,关于返回值的部分:
像素值。如果图像是多层图像,则此方法返回一个元组
在这里插入图片描述

from PIL import Image
im = Image.open('8_0.jpg')
# 获取像素列表
color = im.getpixel((j, i))
print(color)

我们可以看到输出会是一个tuple。

(255, 255, 255)

获得图片的01/二级制文本

如果我们有一个32像素X32像素的图片。如下:

在这里插入图片描述我们可以使用下面的代码:

from PIL import Image
# 打开
im = Image.open('8_0.jpg')

width = im.size[0]
height = im.size[1]

fh = open('8_0.txt', 'w')
print(width, height)
for i in range(height):
    for j in range(width):
        # 获取像素点颜色
        color = im.getpixel((j, i))
        colorsum = color[0] + color[1] + color[2]
        if (colorsum <= 383):
            fh.write('1')
        else:
            fh.write('0')
    fh.write('\n')
fh.close()

文本:

00000000000000000000000000000000
00000000000000011110000000000000
00000000000011111111100000000000
00000000001111111111111000000000
00000000011111111111111000000000
00000000111110000000111100000000
00000001111000000000011100000000
00000001110000000000011110000000
00000001110000000000011110000000
00000011110000000000011110000000
00000011110000000000111100000000
00000001111000000000111100000000
00000001111111000001111000000000
00000000111111111111110000000000
00000000001111111111100000000000
00000000000001111111100000000000
00000000000111111111110000000000
00000000001111110011110000000000
00000000011111000000111000000000
00000000111100000000111000000000
00000000111000000000011100000000
00000001110000000000011100000000
00000001110000000000011100000000
00000001110000000000011100000000
00000001111000000000111000000000
00000000111111111111111000000000
00000000111111111111110000000000
00000000001111111111100000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000

Notes:
1、如果是做手写数字识别的小伙伴,建议使用PS建立32×32的图片,如果直接用画图或者截图之类的方法,获取的像素会比较大,导致运算量比较大,还可能和你的教程的代码种的规格不一样,需要修改,很麻烦。
2、效果不好可能的原因。其实我的代码和网上大部分都相似,但是我只修改了一个地方,就是判断colorsum的值,经过输出求证可能得出,图片中为黑色的地方,基本上不会是0,而是位于0~300之间,这里我使用了255*3/2≈383,这样判断的结果就比较好了。当然如果是其他的图像使用我的383可能就不太好了,这时候就需要适当修改数值了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值