开启左侧

国庆头像不用求人,自己生成

[复制链接]
Criss 发表于 2021-9-30 17:04:01 | 显示全部楼层 |阅读模式
国庆节了,用OpenCV实现渐变版国庆头像,用技术给给自己换个国庆版头像!
生成的效果,头像比例有点不好,导致有点压缩。
微信截图_20210930170129.png

实现这个其实超级简单,只需要两步!
第一步,找一张国旗模板图象,然后生成mask模板;
第二步,选择一张头像图象,根据mask权重与模板图象重新像素叠加混合。就生成了国庆版渐变头像了;

Python代码(需要安装opencv-python):
  1. import cv2 as cv
  2. import numpy as np

  3. def auto_mask_demo(image):
  4.     gq = cv.imread("C:/Users/Criss/Desktop/gq.png")
  5.     cv.imshow("input", gq)

  6.     # 生成mask区域
  7.     h, w, c = gq.shape
  8.     mask = np.zeros((h, w), dtype=np.float32)
  9.     for row in range(h):
  10.             start = int(np.abs(np.sin(row * np.pi / 180) * 50))
  11.             mask[row, start:w] = np.linspace(0, 255, w-start)
  12.     mask = mask / 255.0
  13.     cv.imshow("mask", mask)

  14.     # generate icon
  15.     dst = cv.resize(image, (w, h), interpolation=cv.INTER_CUBIC)
  16.     result = np.zeros_like(dst)
  17.     for row in range(h):
  18.         for col in range(w):
  19.             w2 = mask[row, col]
  20.             w1 = 1.0 - w2
  21.             b1, g1, r1 = gq[row, col]
  22.             b2, g2, r2 = dst[row, col]
  23.             b = b1 * w1 + b2 * w2
  24.             g = g1 * w1 + g2 * w2
  25.             r = r1 * w1 + r2 * w2
  26.             result[row, col] = (int(b), int(g), int(r))
  27.     cv.imshow("profile image", result)
  28.     cv.imwrite("D:/result.png", result)
  29.     cv.waitKey(0)
  30.     cv.destroyAllWindows()

  31. if __name__ == "__main__":
  32.     src = cv.imread("C:/Users/Criss/Desktop/headimage.png")
  33.     auto_mask_demo(src)
复制代码


代码中图像下载:
Img.zip (2 MB, 下载次数: 9)

原文来自【OpenCV学堂】,代码测试后稍作了修改。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表