废话不多说,直接贴代码
import cv2
import numpy as np
import itchat
itchat.auto_login()
friends = itchat.get_friends(update=True)
img_data = itchat.get_head_img(userName=friends[0]['UserName'])
img1 = cv2.imdecode(np.fromstring(img_data, np.uint8), cv2.COLOR_RGB2BGR)
#img1 = cv2.imread('C:/Users/G-CAN/headImages/photo.jpg')
img2 = cv2.imread('flag.png')
img1 = cv2.resize(img1,(950,950))
img2 = cv2.resize(img2,(270,250))
rows,cols,channels = img2.shape
rows1,cols1,channels1 = img1.shape
roi = img1[rows1-rows:, cols1-cols-10:-10 ]
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 240, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
img1_bg = cv2.bitwise_and(roi,roi,mask = mask)
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)
dst = cv2.add(img1_bg,img2_fg)
img1[rows1-rows:, cols1-cols-10:-10 ] = dst
cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite("my_new_photo.jpg", img1)
代码主要通过itchat登陆微信,获取微信个人头像后,使用opencv进行位图的叠加,逻辑比较简单。
下面附加国旗图片和效果图