来得瑟一下!用Python做一个缩放自如的圣诞老人

用Python画圣诞树 ‘‘遇见’’ 圣诞老人 这是雪程序的1.1版本。 上个版本的文章---看这里: 忙活半天只为了看雪--送给大家的冬至礼物https://blog.youkuaiyun.com/qq_54554848/article/details/121873955?spm=1001.2014.3001.5501(下述代码基于上个版本) 上次我发布了--冬至礼物的博客,获得了很多的浏览量,让我甚是欣慰,首先在这里要感谢大家的支持,也感谢部分私信我的提出的疑问和反馈,尤其是对-----为什么我的冬至下雪程序安装包这么大的问题的提出(打包后大于5.. 阅读详情

圣诞节又要到了,虽说我们中国人不提倡过西方的节日,但是商家们还是很喜欢的,估计有对象的男孩纸女孩纸们也很喜欢吧。

今天的主题是为大家展示如何用python做一个不断变大的圣诞老人,就像西游记中能够随意变幻大小的神仙妖怪那样,算是送给大家的小礼物,先上个图吧!

不要心急,盯着图片看5秒

思路要点:

  • 通过缩放获取等比大小的一组图片

  • 将上述图片叠加到固定大小的底图中

  • 按顺序组合图片生成动图

1

图片缩放

本篇文章的大部分工作都是基于opencv实现,而opencv进行图片缩放是极其容易的,不过这次我们要生成的是一组等比缩放的图片,所以在cv2.resize方法的使用上可能跟以往略有出入,先来看函数原型:

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

其中src是原图片,dsize是目标图片大小,当dsize为0的时候,我们就可以通过fx和fy两个参数来分别设置水平轴和垂直轴方向的缩放比例了。这样说可能有些抽象,我们举个例子来说明:

for i in range(1, 40, 1):
  img = cv2.resize(image, (0, 0), fx=i/30, fy=i/30)
  cv2.imwrite(str(i)+'.png', img)

运行上面这段代码会生成39张不同比例的图片,目标图片的大小由缩放比例fx和fy来控制,最小的一幅图边长是原图的1/30,最大的图片边长是原图的1.3倍(下图):

既然等比缩放的图片有了,是不是可以选定一个坐标原点,直接合成动图呢?答案是不行,因为常规的动图生成方法要求素材图片必须是相同的尺寸(像素),下面我们就来着重解决这一问题。

2

底图叠加

python中实现两幅图片叠加的办法有很多,但是他们都存在缺陷——要么叠加的图片必须是相同大小,要么难以控制图片叠加的具体位置。对此,小编采取的办法是在两幅图之间进行“像素级”的替换。


1).生成底图

待叠加的图片中,上层图片就使用刚才获取到的一系列等比缩放图,下层图片我们就生成一张固定大小的空白图片。需要注意,这里生成的空白图片必须大于最大的一幅缩放图。

生成空白底图分两步完成,第一步生成固定大小(垂直轴和水平轴的长度)的二维数组;第二步使用cv2.cvtColor进行颜色空间变换。代码如下:

blank = np.ones((blankh, blankw), dtype=np.uint8) * 255
ret = cv2.cvtColor(blank, cv2.COLOR_GRAY2BGR)

其实上面代码中的ret本质上是一个三维数组,我们可以把它打印出来查看(下图),但是通过cv2.imshow方法展示出来就是一张空白图片了。这其中涉及一些较为底层的内容,大家了解就好,文中不再赘述。

2).像素替换

正如刚才所说,opencv中的一幅图其实是一个三维数组,其实也可以把它看作是二维数组,数组中的

每个元素是形如 [255, 255, 255] 的列表,其中存放的是图片每个像素的颜色参数。也就是说,如果我们想实现一幅图片叠加到另一幅图片这样的视觉效果,可以对被叠加图片对应位置的

像素进行替换赋值。代码形式如下图所示,其中i和j分别为图片在垂直方向和水平方向的坐标。

ret[i, j, 0] = image[i, j, 0]
ret[i, j, 1] = image[i, j, 1]
ret[i, j, 2] = image[i, j, 2]

对一幅图片而言,坐标原点是在左上角(下图所示)。此外,为了保证最终得到动图的效果,不能简单的将图片以坐标原点为基准进行叠加,最好的办法是把叠加原点设在底图下边缘的中心位置。

原理搞清楚后就可以开始图片叠加操作了,在此期间需要进行一些像素对应位置的计算,虽然稍微有点绕但是并不复杂,详细的转化公式就不写了,我们直接看代码:

上面代码中的image是已经缩放完毕的圣诞老人图片,blankh和blankw分别是空白图片的高度和宽度,这个尺寸可以根据需求自行设置。

下图展示的是一幅缩放比例1/2左右的图片和底图叠加后的效果,为了观察方便,我给图片加了一个边框。

3

生成动图

之前我们已经解决了单幅图片与底图的叠加,为了准备合成动图所需素材,还要对多个等比缩放的图片进行底图叠加操作。缩放比例间隔越小、准备的图片素材越多,生成的动图也就越平滑。

当然,动图的效果如何还要综合考虑多个因素,这里小编还是采用39幅图片组合动图。其中最小的图形高度是原图的1/30,最大的图形高度是原图的1.3倍。与底图叠加后的图片就是下面这个样子。

下面来说说动图的合成,将多个相同尺寸的图片合成动图可以使用imageio这个库来实现,核心代码只有一条:

imageio.mimwrite('目标文件名称.gif', gifList, duration=0.15)

其中第一个参数是git目标文件名称;gifList是一组列待合成的图片,也就是上面图片中展示的那些;最后一个参数duration表示画面切换间隔,单位为秒。

现在通过下面这段代码进行动图合成。

file_path = 'pic'
imgList = os.listdir(file_path)
imgList = ['pic/'+img for img in imgList]
gifList = [imageio.imread(img) for img in imgList]
imageio.mimwrite('gif.gif', gifList, duration=0.15)

来看合成后的动图效果(下图),仔细看看好像有点问题,怎么图中的圣诞老人忽大忽小?这跟我们预想的不一样啊。

其实这个问题是出在合成图片的顺序上,我们尝试打印上面代码中的imgList变量,结果如下:

可以看到,素材图片并不是按照我们预想的顺序排序。这在python的文件处理中也算是个比较常见的问题,解决方案之一是可以按照图片的创建时间排序,具体操作是在上面的第二行代码之后插入一条语句:

imgList = sorted(imgList,key=lambda x: os.path.getmtime(os.path.join(file_path, x)))

现在再次进行动图合成,就可以实现文章开头的效果了。

当然了,这种动图制作方法不仅限于圣诞老人,任何图片理论上都是可以的。比如说,我们还可以做一棵不断长大的圣诞树!

看下面的视频,一睹为快!

趣味游戏文章:

太好玩了!用Python写个弹球游戏2.0

巧妙的Python数据结构玩法|实战德州扑克

手把手教你,菜鸟也能用Python写一个2048游戏

用Python做个美少女大战小怪兽

强烈推荐,用Python轻松打造定制款《植物大战僵尸》

Python心得和技巧:

零基础学了8个月的Python,到底有啥感悟

我珍藏的一些好的Python代码,技巧

菜鸟写Python程序,如何从新手变老手

菜鸟必收藏,13个Python惯用小技巧

【圣诞专场】—— 用python海龟库实现圣诞装饰(圣诞树,拐杖糖,圣诞火车,圣诞雪人,圣诞祝福)~~c++《铃儿响叮当》 一年一度的圣诞节又到了,相信大家眼中满是圣诞树、圣诞老人、圣诞麋鹿的样子吧,小编觉得圣诞节氛围浓浓,再用电脑实现以下再适合不过了,所以今天小编写了一篇圣诞专场的博文,也请大家指教,编译环境文章最后有讲。 阅读详情

相关推荐

使用Python制作缩放自如的圣诞老人(圣诞树)

主要介绍了使用Python做一个缩放自如的圣诞老人,这种动图制作方法不仅限于圣诞老人,任何图片理论上都是可以的。比如说,我们还可以做一棵不断长大的圣诞树!具体实例代码跟随小编一起看看吧

圣诞老人python代码_秘密圣诞老人分类

我正在开发一个程序,它将模拟秘密圣诞老人的分类帽。我试图让程序有一个错误陷阱,以防止人们获得自己的名字,但我不能让程序选择一个新的名称,如果有人得到自己的名字。我遇到的另一个问题是程序总是过早退出。在我的代码是:import randomprint "Testing Arrays"Names=[0,1,2,3,4]#0 - Travis#1 - Eric#2 - Bob#3 - Tim#4 - D...

weixin_39689870的博客 1022

基于STM32的半导体制冷片温度控制

制冷片温度控制,温控范围15℃~45℃,本人菜鸡一枚,大佬绕路。 #include "stm32f10x_gpio.h" #include "relay.h" void relay_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//Ê...

大白兔的博客 9015

圣诞老人python代码_Python秘密圣诞老人程序如何取得更高的成功R

我决定做一个Python程序,根据硬编码的限制生成秘密的圣诞老人对(例如,某人找不到他的妻子)。我的家庭成员都很忙,所以很难组织每个人随意画帽子。在我的程序死机很少,因为不幸的随机配对使剩余的一对非法(不过,我在测试脚本部分捕捉到它们)。你可以把它想象成一个亲自重新画的画。在然而,当我的程序成功时,我知道配对是正确的,而不必亲自查看它们,因为我的程序会测试其有效性。明天,我要想办法利用配对,从我的...

weixin_42336892的博客 1891

ESP-IDF下载配合MQTT协议接入云平台实例

通过ESP-IDF下载环境搭建,结合MQTT协议实现设备与云平台通信,详解从配置到连接的完整流程,助力物联网应用开发。重点涵盖espidf下载和MQTT集成关键步骤。

weixin_28913879的博客 454

ECMWF等大气数据批量下载(Python API)详细步骤

ECMWF等大气数据批量下载(Python API) 遥感方向做热红外温度反演,不可避免的要用到大气廓线数据,大气数据具有实时性,比如2018年9月1日的早上8点的影像,为了提高反演精度就需要用到时间上与其相差尽可能接近的大气数据,用于消除大气的影响,如果数据量较少我们可以查看影像的时间和空间范围进行下载,但是如果处理某个较大区域时可能涉及到大量的影像,如果一景一景对应查找去下载会很麻烦,因此针对大量数据的自动批量下载很有必要。本文根据 https://cds.climate.copernicus.eu/#

liuxiaojiangtobeno1的博客 1万+

圣诞老人python代码_用Python画圣诞老人的N种方法

看一下效果:2).与灰度图类似,PIL还可以将图像转换为二值图所谓二值图,即图像上每个像素的颜色非黑即白,图像的二值化 能在保留图像轮廓的前提下使图像中数据量大幅减少,对图像的进一步处理具有非常重要的作用。执行以下代码:再来看看新生成的图片效果:此类操作的主要用途是为图片的进一步处理奠定基础,当然,无论是PIL还是openCV都可以对图像进行更加复杂的处理操作,然而这并不是我们今天的重点,有兴趣的...

weixin_39954908的博客 1802

STM32G070xx将Flash页分块方式存储,固定数据块存储,实现一次擦除多次写入

本例程使用STM32G070xx芯片,Flash大小128KB,Flash每页(2048字节)写满后再擦除。操作存储区分为64块,每块32字节,即写满64次擦除一次;标定存储区分为16块,每块128字节,即写满16次擦除一次,每个存储区的块都有各自的头部标记

RaphaelCeo的博客 1545

圣诞老人python代码_来得瑟一下!用Python做一个缩放自如的圣诞老人

圣诞节又要到了,虽说我们中国人不提倡过西方的节日,但是商家们还是很喜欢的,估计有对象的男孩纸女孩纸们也很喜欢吧。今天的主题是为大家展示如何用python做一个不断变大的圣诞老人,就像西游记中能够随意变幻大小的神仙妖怪那样,算是送给大家的小礼物,先上个图吧!不要心急,盯着图片看5秒思路要点:通过缩放获取等比大小的一组图片将上述图片叠加到固定大小的底图中按顺序组合图片生成动图1、图片缩放本篇文章的大部...

weixin_39860636的博客 675

Win11下CH340串口识别失败的终极排查指南:从驱动更新到硬件电路检查

本文提供了Windows 11系统下CH340串口芯片识别失败的全面排查指南。从驱动更新、系统设置等软件层面入手,逐步深入到USB线缆、电源测量等硬件连接检查,并重点剖析了硬件设计细节,如电源退耦电容容值对设备描述符请求的关键影响,最终帮助开发者系统性地定位并解决识别难题。

weixin_29174013的博客 591

解决Android 14兼容性问题:NDK中arm64-v8a的正确配置方法

本文详细解析Android 14系统架构变化对NDK开发的影响,重点介绍arm64-v8a架构的正确配置方法。针对常见的兼容性问题如so库缺失、ABI不匹配等提供解决方案,并分享性能优化与自动化测试实践,助力开发者高效适配Android 14设备。

algae的博客 1222

python画圣诞老人图片_来得瑟一下!用Python做一个缩放自如的圣诞老人

原标题:来得瑟一下!用Python做一个缩放自如的圣诞老人圣诞节又要到了,虽说我们中国人不提倡过西方的节日, 但是商家们还是很喜欢的,估计有对象的男孩纸女孩纸们也很喜欢吧。今天的主题是为大家展示如何用 python做一个不断变大的圣诞老人,就像西游记中能够随意变幻大小的神仙妖怪那样,算是送给大家的小礼物,先上个图吧! 不要心急,盯着图片看5秒思路要点:通过缩放获取等比大小的一组图片将上述图片叠加到...

weixin_36051633的博客 1018

华南理工大学-大学物理实验-绪论作业

3.用公式测量某圆柱体铝的密度,测得直径=2.0420.003(cm),高=4.1260.004(cm),质量=36.4880.006(g)。计算铝的密度和测量的标准差,并以测量结果表达式表示之。(要求判别和剔除异常数据)(30分)(了解图解法的注意事项,大学物理实验众多实验数据处理采用这种方法,如PN结温度特性研究,光电效应与普朗克常数的测定,霍尔效应测磁场等等,注意规范作图)实验测得温度与对应的金属丝的长度的数据如下表所示。(了解异常数据的判断方法及具体判断过程,30分的题目n(*≧▽≦*)n)

mohen_777的博客 581

用python编写一个fx_来得瑟一下!用Python做一个缩放自如的圣诞老人

虽然圣诞节已经过了,但是商家们还是很喜欢的卖圣诞节贴纸或者头绳等小饰品。今天的主题是为大家展示如何用python做一个不断变大的圣诞老人,就像西游记中能够随意变幻大小的神仙妖怪那样,算是送给大家的小礼物,先上个图吧!不要心急,盯着图片看5秒思路要点:通过缩放获取等比大小的一组图片将上述图片叠加到固定大小的底图中按顺序组合图片生成动图01.图片缩放本篇文章的大部分工作都是基于opencv实现,而op...

weixin_32795125的博客 480

C#联合Halcon机器视觉框架源码

本软件参考EV开发,共用模块,基于WPF+Halcon,是非常不错的学习框架,需要什么功能可以自己添加,插件式开发非常方便。

Z's Palace 4829

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

只要3步,菜鸟也能用Python做个逗逼的表情包

“本文1427个字,阅读需要4分钟”先来个小姐姐表情包,一睹为快表情包的使用,已经成为我们日常生活中必不可少的一个重要的交流工具,但是让人苦恼的是,表情包只能通过收藏他人的或者是从官网上...

cainiao_python的博客 2352

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python画圣诞老人_使用Python给头像加上圣诞帽或圣诞老人小图标附源码

随着圣诞的到来,想给给自己的头像加上一顶圣诞帽。如果不是头像,就加一个圣诞老人陪伴。用Python给头像加上圣诞帽,看了下大概也都是来自2017年大神的文章:https://zhuanlan.zhihu.com/p/32283641主要流程素材准备人脸检测与人脸关键点检测调整大小,添加帽子用dlib的正脸检测器进行人脸检测,用dlib提供的模型提取人脸的五个关键点调整帽子大小,带帽选取两个眼角的点...

weixin_39946767的博客 837

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

用 Python 给微信头像加个圣诞老人(平安果)小图标

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,,版权归原作者所有,如有问题请及时联系我们以作处理 原文 http://www.justdopython.com/2020/12/22/head-flag/ 想要获取更多Python学习资料,了解更多关于Python的知识,可以加Q群630390733踊跃发言,大家一起来学习讨论吧! 圣诞老人是西方神话里圣诞节前夜给小孩子赠送礼物的人物,在国内的圣诞节中,除了圣诞老人,苹果(平安果)也是一个特色元素,本文我们看一下如何使用 Pytho.

pythonputao的博客 972

用python画圣诞树-python圣诞树

广告关闭腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元!import termcolorimport randomimport timeimport datetimefrom os import system,namefrom colorama import initfrom termcolor import colored def cle...

q6q6q的专栏 5662

用Python做一个简单的表白程序

我最近在看了一本Python tkinter从入门到精通,看了四章了,前面四章主要就是讲部件的共同属性,控件的布局,窗口的属性设置,于是利用这些做了个简单的程序,代码如下 from tkinter import * win=Tk()#新建一个窗口 sh=win.winfo_screenheight()#获取屏幕的高 sw=win.winfo_screenwidth()#获取屏幕的宽 winh=int(sh/4)#设置窗口的高 winw=int(sw/3.5)#设置窗口的宽 x=int((sh-winh)

qq_58370894的博客 2122

圣诞老人

a

wind_sky的专栏 450

圣诞老人的代码

这个图主要的实现是图片加载,图片绘图,数据更新,和图片输出。这个因为是c语言所以使用了easyx图形库技术。相应的素材在我的群里面954311208。

2303_80978034的博客 785

python显示gif图片_利用Python制作GIF图片

#Python制作GIF图片import imageiodef create_gif(image_list, gif_name, duration = 0.1):''':param image_list: 这个列表用于存放生成动图的图片:param gif_name: 字符串,所生成gif文件名,带.gif后缀:param duration: 图像间隔时间:return:'''frames = [...

weixin_40001395的博客 493

用Python给头像加上圣诞帽或圣诞老人小徽章

随着圣诞的到来,想给给自己的头像加上一顶圣诞帽。如果不是头像,就加一个圣诞老人陪伴。 用Python给头像加上圣诞帽,看了下大概也都是来自2017年大神的文章:https://zhuanlan.zhihu.com/p/32283641 主要流程 素材准备 人脸检测与人脸关键点检测 调整大小,添加帽子 用dlib的正脸检测器进行人脸检测,用dlib提供的模型提取人脸的五个关键点...

Python学习Q群696455390 705
上一篇: 视频剪辑什么鬼?Python 带你高效创作短视频
下一篇: 骚操作!想了解垃圾分类的图像识别嘛?1小时带你实战Google图像分割模型,送书10本...
菜鸟学Python
博客等级 码龄9年 8061粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值