这学期开学的时候实验室接了个项目,要做一个类似Adobe Illustrator中的“操纵扭曲”功能的Demo

就像这样

AI操纵变换01

AI操纵变换02

需求分析

可见需要实现的功能核心就是通过鼠标的拖拽对图像进行扭曲变形,这里的变形主要可以分为两类

  1. 鼠标拖拽导致的普通变形

  2. 在某一固定锚点基础上的旋转式变形

确定方案

明确了这个后我便开始查阅资料,发现这篇paper 《Image Deformation Using Moving Least Squares》 中利用了MLS移动最小二乘来实现图像变形,其实现的效果和我们的目标极为相似,于是我也决定利用该算法来实现这个Demo

由于要利用鼠标拖拽进行操作,便选择使用Qt来进行图形化界面设计,然鹅我以前也没有用过Qt,因此学习了一些Qt基本知识

开始吧

明确了方案和目标后,便开始了漫长的学习+实践:

在进行到这里之后,发现程序无法实现对某个关节的单独拉伸,于是我们考虑寻找图像中的骨骼,在关节的交点添加一些锚点进行固定

实现效果

最终项目完成,实现了这些功能,如图是个小小的演示

演示效果


本文将会持续更新