用Turkle库和Open-CV图像识别画一个冰墩墩
这两天,冬奥会的吉祥物“冰墩墩”可是火出了圈,说好的“一户一墩,实际却是一墩难求,今天早晨就有个同事一早去排队买给对象。
今天来个轻松的,用Python画一个绝对可爱的冰墩墩,代码太长,只展示部分,后面可以在Github获取完整内容。
我试了下大概十分钟搞定,回家哄哄小朋友还是可以的。
关于Turtle 库
Turtle库是Python中的一个绘制图像的函数库,turtle就是一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制图形。
绘图版冰墩墩
1、打开编辑器,创建一个BingDwenDwen.py文件,需要逐个坐标进行描绘,只展示一部分代码:
# 调节绘制速度t.speed(10) # 左手t.penup()t.goto(177, 112) ... # 五环t.penup()t.goto(-5, -170)t.pendown()t.pencolor("blue")t.circle(6) t.pencolor("black")t.goto(-16, -160)# 冬奥会说明t.write("BEIJING 2022", font=('Arial', 10, 'bold italic'))t.hideturtle()
2、执行程序:
python BingDwenDwen.py
3、成功!
图像识别版冰墩墩
Turtle是一个非常好用的自动绘图工具库,但是用它来画图需要提供大量的坐标点,需要反复的执行,代码非常冗长,适合一些简单的图像描绘。
下面我们用计算机图像识别,来自动获取图片的位置坐标帮助进行画图,复制一个更加高清的冰墩墩。
首先你需要一张冰墩墩的图片,命名为bingdwendwen.png,和python代码在同一个目录下。
下面需要使用open-cv的库,以下步骤如果你的机器已经安装可以跳过:
1、安装pip程序库
如果你还未安装pip,则可以使用以下方法来安装,以下针对Mac系统,Windows系统可以搜索下相关命令:
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本 $ sudo python get-pip.py # 运行安装脚本
注意:用哪个版本的 Python 运行安装脚本,pip 就被关联到哪个版本,如果是 Python3 则执行以下命令:
$ sudo python3 get-pip.py # 运行安装脚本
一般情况 pip 对应的是 Python 2.7,pip3 对应的是 Python 3.x。
2、安装opencv-python库
opencv-python是一个图像和视频处理库,官网如下 https://pypi.org/project/opencv-python/
可以在terminal输入下面代码直接安装:
$ pip install opencv-python
命令行下使用pydoc命令查看安装的Module:
在命令行下运行$ pydoc modules 即可查看。
3、添加代码并且运行
# coding=UTF-8
# This Python file uses the following encoding: utf-8
import turtle as t
import cv2
t.title('BingDwenDwen_CV 公众号:越哥聊IT')
t.getscreen().colormode(255)
# 调用opencv读取并创建灰度图像,按BGR顺序
img = cv2.imread("bingdwendwen.png")[0: -2: 2]
width = len(img[0])
height = len(img)
t.setup(width=width / 2 + 100, height=height + 100)
t.pu()
t.goto(-width / 4 + 10, height / 2 - 10)
t.pd()
t.tracer(2000)
for k1, i in enumerate(img):
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()
这个代码实际是读取图片,然后把坐标数据传递给Turtle,下面执行程序:
python BingDwenDwen_cv.py
获取代码:
需要代码,可以在Git仓库查看
https://github.com/bingyue/bing-dwen-dwen
本文来自博客园,作者:邴越,转载请注明原文链接:https://www.cnblogs.com/binyue/p/15882969.html