在游乐场或者商场中,大家可能会见到过哈哈镜,哈哈镜通过凹凸不平的镜面,将人物或者是物件在镜面显示中进行扭曲,让人看起来非常的搞笑。
对于哈哈镜的成像效果,有两种的方式,一个是下图中间的缩小的效果,另一种则是下图中右侧的放大效果。小编趁着自己的闲暇时间,自己做了一个哈哈镜的软件,用来捉弄一下自己的朋友,大家一起来看看是如何实现的吧。
01.公式原理
对图片进行哈哈镜的操作处理,其实就是像素点位置坐标的一个坐标映射关系的变化,我们来结合下图进行讲解。上图中,图像的左上角为坐标原点(0,0),图像的右小角为图像坐标的最大值(width,height)。图像的中心坐标点为(cx, cy),当然这里的中心点坐标大家可以设定为图像中的任意一个像素点,都是可以的。图像中的任意一点到中心点(cx,cy)的x、y方向上的距离被定义为tx、ty。而对于放大的哈哈镜来说,特征映射后的(x,y)坐标公式如下:
02.程序实现
有了图像的特征映射公式之后,接下来就是利用程序来实现上面的公式了。这里,我们针对放大哈哈镜的程序来进行讲解,程序如下图所示:上图中,程序通过形参来获取中心点的坐标信息,然后对输入图像的每一个坐标,都进行坐标位置的坐标映射,最后将映射后的特征坐标进行像素赋值,并返回最终的结果。这样我们就完成了对于一张图片的放大哈哈镜的效果。而对于缩小的哈哈镜程序,其处理的方式也是相同的,针对每一个像素坐标,按照缩小哈哈镜的公式进行坐标的映射后得到最终的结果。
03.程序界面
本次程序界面的设计,我们采用的是tkinter进行界面的搭建,页面整体的结构布局如下。界面的左侧是功能按钮的选择区域,大家可以点击不同的按钮进行功能的选择,界面的中间部分是图片的展示区域,而右侧则是滑动条,用来进行中心坐标点(cx,cy)的设置。对于放大效果按钮所控制的函数,如下图所示。
函数通过读入滑动条的数值来设置中心点(cx,cy)的数值,同时通过放大函数处理图片,并将处理好的图片在界面中进行展示。而对于缩小效果按钮所控制的函数,其函数功能就是通过缩小函数处理图片,并将图片显示在界面上。
04.效果展示
以上就是关于程序内容的简单讲解,接下来我们通过视频展示的方式来看一下如何运行软件,以及我们的哈哈镜效果吧。
大家在拿到程序后,可以用程序来处理自己的图片发给好友,看看他们的反应如何,感兴趣的小伙伴抓紧来试试吧。
如何获取源码:
在公众号后台输入:小助手,找他拿。备注暗号(哈哈镜)