摘要:對上面公式進行改進,加入變形程度控制變量,改進后瘦臉公式如下,優(yōu)缺點優(yōu)點形變思路簡單直接缺點局部變形算法,只能基于一個中心點,向另外一個點的方向啦。單點拉伸的變形,可以實現(xiàn)瘦臉的效果,但是效果自然度有待提升。
論文:Interactive Image Warping(1993年Andreas Gustafsson)
算法思路:
假設(shè)當(dāng)前點為(x,y),手動指定變形區(qū)域的中心點為C(cx,cy),變形區(qū)域半徑為r,手動調(diào)整變形終點(從中心點到某個位置M)為M(mx,my),變形程度為strength,當(dāng)前點對應(yīng)變形后的目標(biāo)位置為U。變形規(guī)律如下,
其中,x是圓內(nèi)任意一點坐標(biāo),c是圓心點,rmax為圓心半徑,m為調(diào)整變形的終點,u為圓內(nèi)任意一點x對應(yīng)的變形后的位置。
對上面公式進行改進,加入變形程度控制變量strength,改進后瘦臉公式如下,
優(yōu)缺點:
優(yōu)點:形變思路簡單直接
缺點:
代碼實現(xiàn):
import cv2import mathimport numpy as npdef localTranslationWarpFastWithStrength(srcImg, startX, startY, endX, endY, radius, strength): ddradius = float(radius * radius) copyImg = np.zeros(srcImg.shape, np.uint8) copyImg = srcImg.copy() maskImg = np.zeros(srcImg.shape[:2], np.uint8) cv2.circle(maskImg, (startX, startY), math.ceil(radius), (255, 255, 255), -1) K0 = 100/strength # 計算公式中的|m-c|^2 ddmc_x = (endX - startX) * (endX - startX) ddmc_y = (endY - startY) * (endY - startY) H, W, C = srcImg.shape mapX = np.vstack([np.arange(W).astype(np.float32).reshape(1, -1)] * H) mapY = np.hstack([np.arange(H).astype(np.float32).reshape(-1, 1)] * W) distance_x = (mapX - startX) * (mapX - startX) distance_y = (mapY - startY) * (mapY - startY) distance = distance_x + distance_y K1 = np.sqrt(distance) ratio_x = (ddradius - distance_x) / (ddradius - distance_x + K0 * ddmc_x) ratio_y = (ddradius - distance_y) / (ddradius - distance_y + K0 * ddmc_y) ratio_x = ratio_x * ratio_x ratio_y = ratio_y * ratio_y UX = mapX - ratio_x * (endX - startX) * (1 - K1/radius) UY = mapY - ratio_y * (endY - startY) * (1 - K1/radius) np.copyto(UX, mapX, where=maskImg == 0) np.copyto(UY, mapY, where=maskImg == 0) UX = UX.astype(np.float32) UY = UY.astype(np.float32) copyImg = cv2.remap(srcImg, UX, UY, interpolation=cv2.INTER_LINEAR) return copyImgimage = cv2.imread("./tests/images/klst.jpeg")processed_image = image.copy()startX_left, startY_left, endX_left, endY_left = 101, 266, 192, 233startX_right, startY_right, endX_right, endY_right = 287, 275, 192, 233radius = 45strength = 100# 瘦左邊臉 processed_image = localTranslationWarpFastWithStrength(processed_image, startX_left, startY_left, endX_left, endY_left, radius, strength)# 瘦右邊臉 processed_image = localTranslationWarpFastWithStrength(processed_image, startX_right, startY_right, endX_right, endY_right, radius, strength)cv2.imwrite("thin.jpg", processed_image)
實驗效果:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/125087.html
摘要:查看行業(yè)專題分析報告就上參一江湖,更多專題報告持續(xù)更新中。 查看行業(yè)專題分析報告就上參一江湖,更多專題報告持續(xù)更新中。每項專題報告都是從2019開始更新到至今,后續(xù)將持續(xù)更新... 今天為大家分享天然氣專題研究報告的部分目錄如下 : ———————公眾號:參一江湖——————— ?2021...
摘要:前幾天由于團隊需要,折騰了一下圖像液化的處理過程。現(xiàn)在來整理一下思路,做個記錄。用到公式如下,網(wǎng)上拿來的話不多說,上代碼本來想盡量寫出點逼格。。。后來發(fā)現(xiàn)怎么寫也還是幾個搞定,就那樣了。然后再用的把轉(zhuǎn)換后的輸出到中效果圖如下 前幾天由于團隊需要,折騰了一下圖像液化的處理過程。 現(xiàn)在來整理一下思路,做個記錄。 用到公式如下,網(wǎng)上拿來的 showImg(https://segm...
摘要:前幾天由于團隊需要,折騰了一下圖像液化的處理過程。現(xiàn)在來整理一下思路,做個記錄。用到公式如下,網(wǎng)上拿來的話不多說,上代碼本來想盡量寫出點逼格。。。后來發(fā)現(xiàn)怎么寫也還是幾個搞定,就那樣了。然后再用的把轉(zhuǎn)換后的輸出到中效果圖如下 前幾天由于團隊需要,折騰了一下圖像液化的處理過程。 現(xiàn)在來整理一下思路,做個記錄。 用到公式如下,網(wǎng)上拿來的 showImg(https://segm...
摘要:最少知識原則的終極目標(biāo)的是實現(xiàn)完全傻瓜式的程序。我們?nèi)绾巫龅浇獬龑ο箝g的耦合性主要手段還是很多的。最少知識原則的實現(xiàn)其實,最少知識原則和單一原則所達到目的是相似的,一個是,讓你的程序?qū)ν獗M量簡單,一個是讓你的程序里的對象,相互聯(lián)系盡量簡單。 最少知識原則的終極目標(biāo)的是實現(xiàn)完全傻瓜式的程序。 舉個例子吧, 就比如 美圖神器, 你上傳一張鳳姐的照片后,你可以選擇 自然磨皮,高度磨皮 -> ...
閱讀 2293·2021-11-25 09:43
閱讀 3446·2021-10-25 09:48
閱讀 1321·2021-09-13 10:24
閱讀 2734·2019-08-29 15:07
閱讀 1258·2019-08-29 13:14
閱讀 3265·2019-08-29 12:22
閱讀 1354·2019-08-29 11:32
閱讀 3229·2019-08-29 11:23