牛逼,我用Python实现哈哈镜捉弄女友,女友气的拉黑了我

在游乐场或者商场中,大家可能会见到过哈哈镜,哈哈镜通过凹凸不平的镜面,将人物或者是物件在镜面显示中进行扭曲,让人看起来非常的搞笑。

对于哈哈镜的成像效果,有两种的方式,一个是下图中间的缩小的效果,另一种则是下图中右侧的放大效果。小编趁着自己的闲暇时间,自己做了一个哈哈镜的软件,用来捉弄一下自己的朋友,大家一起来看看是如何实现的吧

牛逼,我用Python实现哈哈镜捉弄女友,女友气的拉黑了我_第1张图片


01.公式原理

对图片进行哈哈镜的操作处理,其实就是像素点位置坐标的一个坐标映射关系的变化,我们来结合下图进行讲解。

牛逼,我用Python实现哈哈镜捉弄女友,女友气的拉黑了我_第2张图片

上图中,图像的左上角为坐标原点(0,0),图像的右小角为图像坐标的最大值(width,height)。图像的中心坐标点为(cx, cy),当然这里的中心点坐标大家可以设定为图像中的任意一个像素点,都是可以的。图像中的任意一点到中心点(cx,cy)的x、y方向上的距离被定义为tx、ty。而对于放大的哈哈镜来说,特征映射后的(x,y)坐标公式如下:

牛逼,我用Python实现哈哈镜捉弄女友,女友气的拉黑了我_第3张图片

02.程序实现

有了图像的特征映射公式之后,接下来就是利用程序来实现上面的公式了。这里,我们针对放大哈哈镜的程序来进行讲解,程序如下图所示:

牛逼,我用Python实现哈哈镜捉弄女友,女友气的拉黑了我_第4张图片

上图中,程序通过形参来获取中心点的坐标信息,然后对输入图像的每一个坐标,都进行坐标位置的坐标映射,最后将映射后的特征坐标进行像素赋值,并返回最终的结果。

这样我们就完成了对于一张图片的放大哈哈镜的效果。而对于缩小的哈哈镜程序,其处理的方式也是相同的,针对每一个像素坐标,按照缩小哈哈镜的公式进行坐标的映射后得到最终的结果。

03.程序界面

本次程序界面的设计,我们采用的是tkinter进行界面的搭建,页面整体的结构布局如下。

牛逼,我用Python实现哈哈镜捉弄女友,女友气的拉黑了我_第5张图片

界面的左侧是功能按钮的选择区域,大家可以点击不同的按钮进行功能的选择,界面的中间部分是图片的展示区域,而右侧则是滑动条,用来进行中心坐标点(cx,cy)的设置。对于放大效果按钮所控制的函数,如下图所示。

牛逼,我用Python实现哈哈镜捉弄女友,女友气的拉黑了我_第6张图片

函数通过读入滑动条的数值来设置中心点(cx,cy)的数值,同时通过放大函数处理图片,并将处理好的图片在界面中进行展示。而对于缩小效果按钮所控制的函数,其函数功能就是通过缩小函数处理图片,并将图片显示在界面上。

04.效果展示

以上就是关于程序内容的简单讲解,接下来我们通过视频展示的方式来看一下如何运行软件,以及我们的哈哈镜效果吧。

大家在拿到程序后,可以用程序来处理自己的图片发给好友,看看他们的反应如何,感兴趣的小伙伴抓紧来试试吧。

如何获取源码:

在公众号后台输入:小助手,找他拿。备注暗号(哈哈镜

往期推荐阅读:

  • 快过年啦,还怕手速慢,我用Python自动抢红包!

  • 从屌丝到高手,三道Python编程题,九种解题算法,看看你属于哪一类

  • 值得收藏!20个Python奇技淫巧,让你受益匪浅!

  • 20行Python代码,自动玩“合成大西瓜”!

  • 【建议收藏】学习 Python 的 11 个顶级 GitHub 存储库

  • 30个Python常用极简代码,拿走就用

  • 全球最美Top100女神出炉,国内六人上榜,我Python发现了这些秘密...

  • 别瞎学了,这几门语言要被淘汰了!

你可能感兴趣的:(python,计算机视觉,人工智能,编程语言,深度学习)