Dibujo de la biblioteca de tortugas: dibuje todas las expresiones QQ

Dibujo de la biblioteca de tortugas: dibujar emoticones QQ Los enlaces de recursos están a la derecha: Dibujo de la biblioteca de tortugas: dibujar emoticones QQ

Ideas de implementación

Idea principal

El pincel de tortuga se desliza sobre la matriz de la imagen, establece el color del lápiz en el valor RGB del píxel actual a través de la función pencolor(), dibuja una cierta distancia y luego obtiene la distancia del siguiente píxel para continuar dibujando.

Mejorar

Dado que se dibuja cada píxel, el tiempo de dibujo de toda la expresión será relativamente largo. Para mejorar aún más la velocidad de dibujo, se agrega un proceso de evaluación previa antes del dibujo. Si el RGB promedio de 5 píxeles consecutivos <= 0.9, es correcto Estos cinco puntos de píxel se dibujan respectivamente, de lo contrario, se realiza el juicio previo de los siguientes cinco puntos de píxel. La adición de un juicio previo puede reducir el dibujo de algunos píxeles de fondo y ahorrar algo de tiempo.

Parámetros opcionales y configuraciones recomendadas

im: la imagen del emoticón que se dibujará localmente, leída en
ps: el tamaño del pincel al dibujar
stepsize: la configuración de píxeles al prejuzgar

Se recomienda que la resolución de la imagen del emoticón leída sea inferior a 250 × 250, y el tamaño del pincel sea inferior a 5. El tamaño del pincel es la ampliación de la imagen original. Si la configuración es demasiado grande, la irregularidad será muy obvio Al mismo tiempo, el producto del tamaño del pincel y la resolución de la imagen original determina el tamaño de la ventana de dibujo, si es demasiado grande, el lienzo se mostrará de forma incompleta.
El umbral de juicio previo se establece en 0,9, es decir, los píxeles de fondo de la imagen se consideran casi blancos, por lo que para imágenes con fondos de otros colores, este umbral no funcionará y el programa también puede realizar el dibujo. de tales imágenes, pero no puede ahorrar tiempo de dibujo.

código específico

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 13 21:34:21 2018

@author: 魅梦
"""
import matplotlib.pyplot as plt
from turtle import *
import numpy as np

im = plt.imread('20201114102455.png')
speed(0)
# 设置画笔大小
ps = 3
stepsize = 5
height, weight, deep = im.shape[0], im.shape[1], im.shape[2]
maincolor = np.mean(im.reshape(height*weight, deep), axis=0)
print(tuple(maincolor))
if im[0][0][0] > 1:
    im = im/255
screensize(weight*ps, height*ps)
setup(weight*(ps + 1), height*(ps + 1))

for he in range(height):
    for we in range(0, weight, stepsize):
        if np.mean(im[he][we: we + stepsize]) <= 0.9:
            up()
            goto(ps*(we - weight/2), ps*(height/2 - he))
            down()
            for w in range(we, we + stepsize):
                r, g, b = im[he][w][0], im[he][w][1], im[he][w][2]
                pencolor(r.item(), g.item(), b.item())
                pensize(ps)
                forward(ps)
hideturtle()
done()

lograr efecto

Resultado del dibujo de expresión

La dirección se puede mejorar.

Este artículo realiza el dibujo de expresiones. Para ahorrar el tiempo de dibujo de algunas imágenes, se realiza un juicio previo. Algunos parámetros son opcionales. Si los lectores están interesados, pueden introducir un algoritmo de eliminación de ruido de imágenes para realizar el dibujo de expresiones de alta definición, y al mismo tiempo, el fondo general RGB Realice la extracción para realizar la configuración automática del umbral de juicio previo y ampliar el rango de imagen aplicable del programa.

Supongo que te gusta

Origin blog.csdn.net/qq_36949278/article/details/110672463
Recomendado
Clasificación