def adjustBlenAlpha(*args):
        global points1, points2, dt, imNorm1, imNorm2
        alpha = float(args[0]) / 10
        pointsMorph = (1 - alpha) * points1 + alpha * points2
        imOut1 = fbc.warpImage(imNorm1, points1, pointsMorph.tolist(), dt)
        imOut2 = fbc.warpImage(imNorm2, points2, pointsMorph.tolist(), dt)

        imMorph = (1 - alpha) * imOut1 + alpha * imOut2

        cv2.imshow("Morphed Face", imMorph)
def morphImages(alpha, imgNorm1, postions1, imgNorm2, postions2, dt):
    pointsMorph = (1.0 - alpha) * points1 + alpha * points2

    imOut1 = fbc.warpImage(imgNorm1, points1, pointsMorph, dt)
    imOut2 = fbc.warpImage(imgNorm2, points2, pointsMorph, dt)

    imMorph = (1 - alpha) * imOut1 + alpha * imOut2

    imgShow = np.zeros((480, 480 * 3, 3), dtype=float)
    imgShow = cv2.hconcat([imgNorm1, imgNorm2, imMorph])

    cv2.imshow(winName, imgShow)
        pointsAvg = pointsAvg + (points/(1.0*numImages))

        # 添加边界点
        points = np.concatenate((points, boundaryPts), axis=0)

        pointsNorm.append(points)
        imagesNorm.append(img)

    pointsAvg = np.concatenate((pointsAvg, boundaryPts), axis=0)
    
    # 计算delaunay三角形
    rect = (0, 0, w, h)
    dt = fbc.calculateDelaunayTriangles(rect, pointsAvg)
    
    # 输出图像
    output = np.zeros((h, w, 3), dtype=np.float)
    
    for i in range(0, numImages):
        imWarp = fbc.warpImage(imagesNorm[i], pointsNorm[i], pointsAvg.tolist(), dt)

        output = output + imWarp
    
    output = output/(1.0*numImages)
    cv2.imshow("Result", output)
    cv2.waitKey(0)
    



  # Find forehead points
  appendForeheadPoints(points1)
  appendForeheadPoints(points2)

  # Find Delaunay Triangulation
  sizeImg1 = img1.shape
  rect = (0, 0, sizeImg1[1], sizeImg1[0])
  dt = fbc.calculateDelaunayTriangles(rect, points1)

  # Convert image for warping
  img1 = np.float32(img1)/255.0
  img2 = np.float32(img2)/255.0

  # Warp wrinkle image to face image
  img1Warped = np.copy(img2)
  img1Warped = fbc.warpImage(img1, img1Warped, points1, points2, dt, useOutputImageSize=True)
  img1Warped = np.uint8(img1Warped*255.0)
  img2 = np.uint8(img2*255.0)

  # Calculate face mask for seamless cloning
  mask = getFaceMask(img2.shape[0:2], points2)

  # Seamlessly clone the wrinkle image onto original face
  r1 = cv2.boundingRect(np.float32(points2))
  # Bounding rectangle r1 has 4 elements: left(x1), top(y1), width(w), height(h)
  center1X = r1[0] + int(r1[2]/2.0)
  center1Y = r1[1] + int(r1[3]/2.0)
  center1 = (center1X, center1Y)
  clonedOutput = cv2.seamlessClone(img1Warped, img2, mask, center1, cv2.MIXED_CLONE)

  # Blurring face mask to alpha blend to hide seams
Exemple #5
0
    pointsAvg = np.concatenate((pointsAvg, boundaryPoints), axis=0)

    # Calculate Delaunay triangulation.
    rect = (0, 0, w, h)
    dt = fbc.calculateDelaunayTriangles(rect, pointsAvg)

    # Start animation.
    alpha = 0
    increaseAlpha = True

    while True:
        # Compute landmark points based on morphing parameter alpha
        pointsMorph = (1 - alpha) * points1 + alpha * points2

        # Warp images such that normalized points line up with morphed points.
        imOut1 = fbc.warpImage(imNorm1, points1, pointsMorph.tolist(), dt)
        imOut2 = fbc.warpImage(imNorm2, points2, pointsMorph.tolist(), dt)

        # Blend warped images based on morphing parameter alpha
        imMorph = (1 - alpha) * imOut1 + alpha * imOut2

        # Keep animating by ensuring alpha stays between 0 and 1.
        if (alpha <= 0 and not increaseAlpha):
            increaseAlpha = True
        if (alpha >= 1 and increaseAlpha):
            increaseAlpha = False

        if increaseAlpha:
            alpha += 0.025
        else:
            alpha -= 0.025