大创项目是图像识别,第一个任务是将一个图片转换成二值图像
之前用过python的numpy和turtle,这次要用到图像库PIL的类Image,也算是刚刚从零开始学起
整体效果(用01串表示图像)
原理很简单:将图片中黑色部分用0,其余部分用1
详细过程:
先读取照片,获取图片的像素,然后对像素进行缩放,再对缩放后的照片黑白(如果原本是彩色图)。
然后一次获取图像中每一点像素的RGB颜色值,若为黑色则将该像素替换为0,其余为1
用一个字符串存储,最后按照指定长宽输出
用到的工具:
im.getpixel((j, i))
#getpixel是获取图像中某一点像素的RGB颜色值
im = im.resize((width, height))
#resize修改图片尺寸
im = im.convert('1')
#用于不同模式图像之间的转换
其中1为获得二值图像
模式L为灰色图像
我们用原图像的长宽乘以常数(代码中用SCALE)来实现缩放
from PIL import Image SCALE = 0.3 #等比例缩放 def get_char(pixel, blank_char='0', fill_char='1'): if pixel == 0: return blank_char else: return fill_char im = Image.open(r"ma.jpg") size = im.size #获取图片的像素 #size[0]*size[1] 横宽像素 width, height = int(size[0] * SCALE), int(size[1] * SCALE) im = im.resize((width, height))#修改图片尺寸 im = im.convert('1')#获得二值图像 txt = "" for i in range(height): for j in range(width): txt += get_char(im.getpixel((j, i)))#getpixel是获取图像中某一点像素的RGB颜色值 txt += '\n' #print(txt) f = open(r'gou.txt', 'w') print(txt, file=f) f.close()