本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目前短视频APP在移动端受欢迎程度非常高,对于用户而言拍摄好看又有趣的视频是非常享受的事情,不仅如此在获赞和评论的同时还可以跟其他用户进行交流,在一定程度上也满足了大部分用户的虚荣心。为了使用户录制更加优质的视频,美颜视频sdk是众多短视频APP开发商都会用到的,其中自动瘦脸与大眼功能是最基础的。 美颜视频sdk开发过程中需要用到的自动瘦脸与大眼可以看作是图像局部扭曲算法其中的一个应用,而所谓的图像局部扭曲算法包括:局部缩放、局部平移、局部旋转等三个算法。 局部缩放算法主要是用来实现大眼功能,局部平移算法主要是实现自动瘦脸功能。 1.图像局部平移 关于图像局部缩放的算法实现,在这里提供一部分代码仅供参考。 precision highp float; varying highp vec2 textureCoordinate; uniform sampler2D inputImageTexture; uniform highp float radius; uniform highp float aspectRatio; uniform floatleftContourPoints[MAX_CONTOUR_POINT_COUNT*2]; uniform floatrightContourPoints[MAX_CONTOUR_POINT_COUNT*2]; uniform floatdeltaArray[MAX_CONTOUR_POINT_COUNT]; uniform int arraySize; highp vec2 warpPositionToUse(vec2currentPoint, vec2 contourPointA, vec2contourPointB, float radius, float delta, float aspectRatio) { vec2 positionToUse = currentPoint; vec2 currentPointToUse =vec2(currentPoint.x, currentPoint.y * aspectRatio + 0.5 - 0.5 * aspectRatio); vec2 contourPointAToUse =vec2(contourPointA.x, contourPointA.y * aspectRatio + 0.5 - 0.5 * aspectRatio); float r = distance(currentPointToUse,contourPointAToUse); if(r < radius) { vec2 dir = normalize(contourPointB -contourPointA); float dist = radius * radius - r * r; float alpha = dist / (dist + (r-delta)* (r-delta)); alpha = alpha * alpha; positionToUse = positionToUse - alpha* delta * dir; } 2.图像局部缩放 关于图像局部缩放的算法实现,在这里提供一部分代码仅供参考。 precision highp float; varying highp vec2 textureCoordinate; uniform sampler2D inputImageTexture; uniform highp float scaleRatio;// 缩放系数,0无缩放,大于0则放大 uniform highp float radius;// 缩放算法的作用域半径 uniform highp vec2 leftEyeCenterPosition; // 左眼控制点,越远变形越小 uniform highp vec2 rightEyeCenterPosition; // 右眼控制点 uniform float aspectRatio; // 所处理图像的宽高比 highp vec2 warpPositionToUse(vec2centerPostion, vec2 currentPosition, float radius, float scaleRatio, floataspectRatio) { vec2 positionToUse = currentPosition; vec2 currentPositionToUse =vec2(currentPosition.x, currentPosition.y * aspectRatio + 0.5 - 0.5 *aspectRatio); vec2 centerPostionToUse =vec2(centerPostion.x, centerPostion.y * aspectRatio + 0.5 - 0.5 * aspectRatio); float r = distance(currentPositionToUse,centerPostionToUse); if(r < radius) { float alpha = 1.0 - scaleRatio * pow(r/ radius - 1.0, 2.0); positionToUse = centerPostion + alpha* (currentPosition - centerPostion); } return positionToUse; } 关于前面提供的一些代码只是用来参考的,并没办法真正的实现自动瘦脸与大眼功能,具体的还是要找专业的美颜视频sdk服务商,不仅是平台方就连短视频APP开发者们也都选择直接拿过来接入接口使用,既省时又节省成本。 无论是拍照还是录制视频,尤其是在像短视频APP这样流量巨大的社交娱乐平台,任何人都想要将自己最美的一面呈现出来,所以美颜视频sdk可以说是十分“功不可没”了。 声明:以上内容均为作者本人原创,转载需注明作者及原文链接,欢迎转载分享。
|