怎么使用Python画图纪念黄家驹
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"怎么使用Python画图纪念黄家驹"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"怎么使用Python画图纪念黄家驹"文章能帮助大家解决问题。
千家信息网最后更新 2025年01月19日怎么使用Python画图纪念黄家驹
这篇文章主要介绍"怎么使用Python画图纪念黄家驹"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"怎么使用Python画图纪念黄家驹"文章能帮助大家解决问题。
思路:
运用 PIL 的 Image 模块与 turtle 模块读取并重新画出图像
就是读取一张有人像的图片,然后通过循环对比,记录下人各行人像的像素坐标,然后再通过 turtle 画出大概的人像轮廓。
Image 模块有直接显示轮廓的函数,而且对于从图象中识别出人像,这个对于小白太难了,所以就选取黑白或者是色彩单一、含人像的图像来识别。
步骤:
步骤 | 操作 | 用到的库 |
---|---|---|
1 | 读取图像,通过遍历每一行像素记录并对比,得到画图所需的人像'坐标' | PIL |
2 | 根据所得到的坐标,调用 turtle 库画图 | turtle |
第一步,读取图片,获得画图坐标
获取坐标是逐行遍历像素的过程,便利时记录每一行像素中非白色(白色为背景色)的像素条的始末坐标(X1
,X2
)。 对比时,当前像素与同行的下一个像素进行比较,如果两个像素值不同,且有一像素为背景色,那么记录非背景色的横坐标。 记录时,整张图的数据暂时保存在一个列表中,该列表由 n 个列表组成(n 为图像像素行数),这 n 个列表存着对应行的所有非背景色像素条的始末坐标。
源码
from PIL import Imageimport turtle as tdef get_lst(img_path): imgf = Image.open(img_path) # 读取图像 global size print(size:= imgf.size) # 获取图像尺寸/大小 pix = imgf.load() lst = [[] for i in range(size[1])] # 构造空列表 for y in range(0, size[1]): # 从第一行开始循环 index = 0 for x in range(0, size[0]-1): # 循环第y行的每一个像素 # 如果当前像素与下一个像素值不同且两者有一为背景色,则记录坐标 if pix[x, y] != pix[x+1, y] and (255, 255, 255, 255) in [pix[x, y], pix[x+1, y]]: if index == 0: # index值为0说明是像素条起始坐标 lst[y].append([x+1, ]) index += 1 else: # index值为1说明记录的是像素条结束坐标 lst[y][-1].append(x) index = 0 return lst
第二步,画图
得到了每一个像素条的始末坐标后,就可以逐行画图了
源码
def paint(lst): fontc = 'whitesmoke' # 右边字的颜色 manc = 'black' #'dimgrey' 人像的颜色 t.setup(width=size[0]+40, height=size[1]) # 绘图窗口大小 t.screensize(bg='oldlace') # 画布背景色 t.bgpic(r'c:\\users\\pxo\\desktop\\bg.png') # 画布背景图 t.speed(333) #画画速度 据说范围[1,10] for y in range(0, size[1]): # 遍历每一行 t.pencolor(manc) for line in lst[y]: # 遍历每一个像素条 if line[0] > 364 and 144 < y < 495: # 这个是判断是否是右边的字 t.pencolor(fontc) # 下面是画像素条 t.penup() t.goto(line[0]-size[0]//2, (size[1]-y)-size[1]//2) t.pendown() t.goto(line[1]-size[0]//2, (size[1]-y)-size[1]//2) t.mainloop()
开始:
if __name__ == '__main__': img_path = r'c:\\users\\pxo\\desktop\\jh.png' # 图像地址 lst = get_lst(img_path) paint(lst)
这样就实现了使用 Python Turtle+PIL 绘制黄家驹效果。
随机线条实现方式:
from PIL import Imageimport turtle as tfrom random import choicedef get_lst(img_path): imgf = Image.open(img_path) global size print(size:= imgf.size) pix = imgf.load() lst = [[] for i in range(size[1])] for y in range(0, size[1]): index = 0 for x in range(0, size[0]-1): if pix[x, y] != pix[x+1, y] and (255, 255, 255, 255) in [pix[x, y], pix[x+1, y]]: if index == 0: lst[y].append([y, x+1, ]) # 这里在每一个像素条的数据中加入了其纵坐标y index += 1 else: lst[y][-1].append(x) index = 0 # 这里也改了,返回的数据列表的子元素是所有单独的像素条,而不是某一行像素条的总和 lt = [] for i in lst: for j in i: if j: lt.append(j) return ltdef paint(lst): fontc = 'darkorange' manc = 'black' #'dimgrey' t.setup(width=size[0]+40, height=size[1]+40) t.screensize(bg='oldlace') #t.bgpic(r'c:\\users\\pxo\\desktop\\bg.png') t.speed(330) cnt = len(lst) lt = [i for i in range(cnt)] # 弄一个种子列表,理解为存取位置 flst = [] for i in range(cnt): del lt[lt.index(index:=choice(lt))] #获取并删除一个随机位置 line = lst[index] # 从所有线条中得到一条随机线条(像素条) y = line[0] x1, x2 = line[1], line[2] t.pencolor(manc) if x1 > 364 and 144 < y < 495: flst.append(line) continue t.penup() t.goto(x1-size[0]//2, (size[1]-y)-size[1]//2) t.pendown() t.goto(x2-size[0]//2, (size[1]-y)-size[1]//2) new_flst = sorted(flst[:-80], reverse=True) for line in new_flst: y = line[0] x1, x2 = line[1], line[2] t.pencolor(fontc) t.penup() t.goto(x1-size[0]//2, (size[1]-y)-size[1]//2) t.pendown() t.goto(x2-size[0]//2, (size[1]-y)-size[1]//2) t.hideturtle() t.mainloop()if __name__ == '__main__': img_path = r'c:\\users\\pxo\\desktop\\jh.png' lst = get_lst(img_path) paint(lst)
关于"怎么使用Python画图纪念黄家驹"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
像素
坐标
人像
背景
图像
一行
黄家
不同
始末
数据
模块
知识
线条
循环
位置
右边
图片
大小
步骤
源码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机网络技术ppt课件免费
我的世界水龙头服务器
云南智慧养老软件开发哪儿好
上海升东网络技术有限公司
智能互联网网络技术
快速的网络安全型号
软件开发简历项目经理
安川服务器报AO2
年龄小于的数据库怎么计算
数据库连接池怎么关
南昌app软件开发一般要多少钱
sqlserver数据库迁移
河南慧趣网络技术
茶颜悦色数据库营销
山东pdu服务器专用电源厂商
顺丰数据库删除会怎样
服务器到路由器的线
计算机网络技术哪个大学最好
app服务器方案
学《网络安全》有感
tzb国际网络安全团队
软件开发员一个月多少钱
百度免费服务器空间数据库
数据库 瓶颈
九江学院计算机网络技术专业
sqlite数据库端口
网络安全工作规范 ppt
软件开发配机
广州自助点餐软件开发
pubg国际服定位服务器