【问题标题】:Convert a turtle image in python into a 2D binary matrix?将python中的乌龟图像转换为二维二进制矩阵?
【发布时间】:2019-05-22 11:21:33
【问题描述】:

我正在生成分形图像,特别是在 Python 中使用海龟生成科赫曲线。我打算计算图像的空隙度,为此我需要二维二进制矩阵形式的图像。

如何将海龟输出转换为可用于进一步计算的 0 和 1 的 2D 二进制矩阵?

【问题讨论】:

标签: python turtle-graphics


【解决方案1】:

下面的脚本创建了一个小的tkinter 应用程序,当点击Draw 按钮时,它会用海龟图形绘制一些东西。当点击Save按钮时,它会将图形保存到位图图像文件中。

它使用 PIL(Python 图像库)模块将海龟图形画布转换为 RGB 图像,然后将其转换为每像素 1 位的位图图像。

这是它创建的turtlescreen.png 位图图像文件:

您从未指出您想要的图像格式,因此您可能需要修改脚本以创建其他格式 - 它当前创建.png 格式图像。图像文件名的扩展名决定了这一点。

from PIL import ImageGrab
import tkinter as tk
import tkinter.messagebox as tkMessageBox
import turtle

WIDTH, HEIGHT = 500, 400
IMG_FILENAME = 'turtlescreen.png'  # Extension determines file format.


def draw_stuff(canvas):
    screen = turtle.TurtleScreen(canvas)

    t = turtle.RawTurtle(screen.getcanvas())
    t.speed(0)  # Fastest.
    t.pencolor('black')
    t.hideturtle()

    # Draw a snowflake.
    size = 10

    def branch(size):
        for i in range(3):
            for i in range(3):
                t.forward(10.0*size/3)
                t.backward(10.0*size/3)
                t.right(45)
            t.left(90)
            t.backward(10.0*size/3)
            t.left(45)
        t.right(90)
        t.forward(10.0*size)

    # move the pen into starting position
    t.penup()
    t.forward(10*size)
    t.left(45)
    t.pendown()

    # Draw 8 branches.
    for i in range(8):
        branch(size)
        t.left(45)

    print('done')

def getter(root, widget):
    x = root.winfo_rootx() + widget.winfo_x()
    y = root.winfo_rooty() + widget.winfo_y()
    x1 = x + widget.winfo_width()
    y1 = y + widget.winfo_height()
    return ImageGrab.grab().crop((x, y, x1, y1))

def save_file(root, canvas, filename):
    """ Convert the Canvas widget into a bitmapped image. """
    # Get image of Canvas and convert it to bitmapped image.
    img = getter(root, canvas).convert('L').convert('1')
    img.save(IMG_FILENAME)  # Save image file.

    tkMessageBox.showinfo("Info", "Image saved as %r" % filename, parent=root)


# main
root = tk.Tk()
canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT,
                   borderwidth=0, highlightthickness=0)
canvas.pack()

btn_frame = tk.Frame(root)
btn_frame.pack()
btn1 = tk.Button(btn_frame, text='Draw', command=lambda: draw_stuff(canvas))
btn1.pack(side=tk.LEFT)
btn2 = tk.Button(btn_frame, text='Save',
                 command=lambda: save_file(root, canvas, IMG_FILENAME))
btn2.pack(side=tk.LEFT)
btn3 = tk.Button(btn_frame, text='Quit', command=root.quit)
btn3.pack(side=tk.LEFT)

root.mainloop()

【讨论】:

    猜你喜欢
    • 2017-04-16
    • 2013-12-17
    • 1970-01-01
    • 2019-05-02
    • 2020-01-31
    • 2020-03-03
    • 1970-01-01
    • 2022-01-23
    • 2015-06-01
    相关资源
    最近更新 更多