在抖音中,我们经常看到各种抖音玩家都喜欢使用哈哈镜效果。那么什么是哈哈镜呢?
在现实生活中,哈哈镜是指一种表面凹凸不平的镜子,可以反映出人像及物体的扭曲面貌。简单点来说就是拉伸人脸(物件),或者压缩人脸(物体)的效果。
哈哈镜的实现原理如下:
假设输入图像的宽高为w和h,图像中心点的坐标为(cx。cy)。那么图像中任意一点(x,y)到中心点的距离为(x-cx),(y-cy)。
那么拉升放大,图像变换的半径为r(r是哈哈镜的范围大小)。得到公式如下:
x=(tx/2)*(sqrt(tx*tx+ty*ty)/r)+cx
y=(ty/2)*(sqrt(tx*tx+ty*ty)/r)+cy
同理,压缩缩小的公式如下(compress为压缩强度):
x=cos(atan2(ty,tx))*compress*sqrt(sqrt(tx*tx+ty*ty))+cx y=cos(atan2(ty,tx))*compress*sqrt(sqrt(tx*tx+ty*ty))+cy
哈哈镜放大效果既然我们了解了其数学公式以及其实现的原理,下面我们来直接实现哈哈镜的放大效果。具体代码如下所示:
运行之后,效果如下:
直接视频实现哈哈镜效果抖音上面的哈哈镜都是动态的,并不是单一的图片这么变来变去。其实,只要我们集合前面的摄像头视频录制功能,就可以完成视频哈哈镜的动态效果。具体代码如下:
if __name__ == "__main__": cap = cv2.VideoCapture(0) while (cap.isOpened()): ret, frame = cap.read() frame=enlarge_effect(frame) cv2.imshow('video', frame) c = cv2.waitKey(1) if c == 27: break cap.release() cv2.destroyAllWindows()
以上就是抖音扭曲人脸特效的全部内容,希望能够对大家有所帮助。