前言
在现实生活中,哈哈镜是指一种表面凹凸不平的镜子,可以反映出人像及物体的扭曲面貌。简单点来说就是拉伸人脸(物件),或者压缩人脸(物体)的效果。
假设输入图像的宽高为w和h,图像中心点的坐标为(cx,cy)。那么图像中任意一点(x,y)到中心点的距离为(x-cx),(y-cy)。
x=(tx/2)*ty)/r)+cx
tx+ty*同理,压缩缩小的公式如下(press为压缩强度):
press*tx+ty*press*tx+ty*既然我们了解了其数学公式以及其实现的原理,下面我们来直接实现哈哈镜的放大效果。具体代码如下所示:
#哈哈镜放大效果实现
def enlarge_effect(img):
h, w, n = img0)
new_img = img0) * (math0) * (mathimread("4imshow("4", enlarge_img)
cv2destroyAllWindows()
需要注意的是,上面的计算过程可能导致有浮点数的出现,而像素值必须为整数。所以,为了保证像素值的有效性,必须在计算过程完整之后,进行强制类型转换int()。另外,计算x,y值时,可能会导致超过图像坐标的范围,所以必须用x<w和y<h来判断防止越界。
哈哈镜缩小效果
运行之后,效果如下:
直接视频实现哈哈镜效果