turtle画出一张图片

原创链接

看见一篇博客,应评论这里给他加上注释

import turtle as t  # 导入turtle模块,命名为t
import cv2  # 导入OpenCV模块,命名为cv2
t.getscreen().colormode(255)  # 设置画布颜色模式为RGB的0-255模式
img1 = cv2.imread('图片.jpg')[0: -2: 2]  # 读入图像,每隔2行2列读取一个像素点,裁剪最后两行
width = len(img1[0])  # 获取图像的列数,即宽度
height = len(img1)  # 获取图像的行数,即高度
t.setup(width=width / 2 + 100, height=height + 100)  # 设置画布宽和高
t.pu()  # 抬起画笔
t.goto(-width / 4 + 10, height / 2 - 10)  # 将画笔移动到左上角起点处
t.pd()  # 放下画笔
t.tracer(2000)  # 设置绘制的速度为2000
for k1, i in enumerate(img1):  # 遍历每一行
    for j in i[::2]:  # 每隔一个像素点遍历一次列
        t.pencolor((j[0], j[1], j[2]))  # 获取当前像素点的颜色,设置为画笔颜色
        t.fd(1)  # 前进一个像素点的距离
    t.pu()  # 抬起画笔
    t.goto(-width / 4 + 10, height / 2 - 10 - k1 - 1)  # 移动到下一行的起点处
    t.pd()  # 放下画笔
t.done()  # 绘制完成,关闭绘图窗口

内容详解:

第三行代码

t.getscreen().colormode(255)

turtle 模块中的 getscreen() 函数是用来获取绘图窗口的函数,返回一个 Screen 对象。 Screen 对象提供了一些窗口相关的功能,例如 colormode(),用来设置窗口中颜色的模式。

第四行代码

img1 = cv2.imread('2.jpg')[0: -2: 2]

这行代码是对读入的图片进行裁剪的操作。其中,[0:-2:2]表示对图像的行进行裁剪:

0 表示裁剪的起始位置为第一行(由于Python中的索引是从0开始的,所以第一行的索引为0);
-2 表示裁剪的终止位置为最后两行,由于Python中的负数索引是从后往前数的,所以-2相当于倒数第二行;
2 表示每隔2行取一个像素点的值,因为图片中像素点的数量很多,如果每个像素都处理一遍,会大大降低程序运行效率,所以我们只取一部分像素进行处理。
这行代码的作用是裁剪图片,并只取其中每隔两行的像素点处理,以达到加快处理速度的目的。

来回配置图片path麻烦,我写了个UI

完整代码:

import tkinter as tk
import tkinter.filedialog
import turtle as t  # 导入turtle模块,命名为t
import cv2  # 导入OpenCV模块,命名为cv2
def hua(path):
    t.getscreen().colormode(255)  # 设置画布颜色模式为RGB的0-255模式
    img1 = cv2.imread(path)[0: -2: 2]  # 读入图像,每隔2行2列读取一个像素点,裁剪最后两行
    width = len(img1[0])  # 获取图像的列数,即宽度
    height = len(img1)  # 获取图像的行数,即高度
    t.setup(width=width / 2 + 100, height=height + 100)  # 设置画布宽和高
    t.pu()  # 抬起画笔
    t.goto(-width / 4 + 10, height / 2 - 10)  # 将画笔移动到左上角起点处
    t.pd()  # 放下画笔
    t.tracer(2000)  # 设置绘制的速度为2000
    for k1, i in enumerate(img1):  # 遍历每一行
        for j in i[::2]:  # 每隔一个像素点遍历一次列
            t.pencolor((j[0], j[1], j[2]))  # 获取当前像素点的颜色,设置为画笔颜色
            t.fd(1)  # 前进一个像素点的距离
        t.pu()  # 抬起画笔
        t.goto(-width / 4 + 10, height / 2 - 10 - k1 - 1)  # 移动到下一行的起点处
        t.pd()  # 放下画笔
    t.done()  # 绘制完成,关闭绘图窗口
gu=tk.Tk()
gu.geometry("200x100")
gu.title("             turtle画图片")
def tu():
    kuang.delete(0,"end")  #删除上次
    ts=tkinter.filedialog.askopenfilename()  #图片目录   注意不要把照片放在中文路径下
    v.set(ts)
    hua(ts)
an=tk.Button(text="选择",command=tu,bg='skyblue').place(x=130,y=35)
test=tk.Label(text="turtle图片",font=("宋体")).place(x=8,y=10)
v = tk.StringVar()
kuang=tk.Entry(width=15,textvariable=v)
kuang.place(x=15,y=40)
gu.mainloop()

效果

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值