这次计算机视觉作业觉得有点意思,简单实现起来也不难,当然,如果要做好,我觉得是很难的。
首先来看下一组效果图
然后说一下我具体的实现方法。
1.找到脸部特征点。
2.进行三角剖分。
3.对每一个三角面片进行插值。
首先来说一下第一步,找到脸部特征点。我们一定要清楚,我们为什么要找脸部特征点,因为,如果我们单纯对2张图片做插值,如果嘴巴在不同的地方,那么插值过程就会出现2个嘴巴,有幻影现象。所以我们需要找到特征点来进行三角剖分,然后插值处理。
好吧~其实对于特征点和三角剖分我都是手动完成的,有能力的,你们就利用opencv的函数去做到自动识别吧,因为时间比较赶。我是利用CImg在图片中可以显示像素点坐标,然后快速标记的特征点,存储在一个cvPoint2D32f数组里面。
效果如下:
//这是存放小孩脸部特征点的数组
const CvPoint2D32f srcPoint[35]{
{71, 260},
{106, 142},
{250, 42},
{384, 142},
{415, 260},
{260, 153},
{117, 219},
{379, 219},
{172, 283},
{321, 282},
{137, 308},
{222, 302},
{275, 301},
{354, 296},
{383, 315},
{106, 291},
{156, 322},
{189, 312},
{213, 329},
{288, 329},
{309, 312},
{343, 325},
{250, 375},
{230, 399},
{269, 398},
{126, 431},
{187, 429},
{251, 419},
{307, 429},
{368, 424},
{227, 462},
{267, 463},
{180,