讲解下如何给女朋友照片加上个性相框,学会让她夸你。
素材1
相框
你的女朋友图
代码
import cv2 import numpy as np def get_four_points(im): data = {} data['im'] = im.copy() data['points'] = [] cv2.namedWindow("Image", 0) cv2.imshow('Image',im) #请注意你标记点的数据,是顺时针,需要与pst_src 方向一致 cv2.setMouseCallback("Image",mouse_handler,data) cv2.waitKey(0) #竖直方向堆叠起来; points = np.vstack(data['points']).astype(float) return points #---第4步:主函数--- def main(): #美女照片读取,注意路径 img_src = cv2.imread("meinv.jpg") size = img_src.shape # 取得四个坐标 ##需要注意一点,坐标 Pick 点的顺序须与记录替换图像顶点顺序一致,否则转换图会有偏差 pst_src = np.array( [ [0,0],[size[1]-1,0], [size[1]-1,size[0]-1], [0,size[0]-1] ],dtype=float ) #大图:相框,注意路径 img_dst = cv2.imread("xiangkuang.jpg") print("点击bllboard的四个角,然后回车")#获取四个点 four_point = get_four_points(img_dst) #Calculate Homography between source and destination points #计算源点和目标点之间的单应性 h,status = cv2.findHomography(pst_src,four_point) #透视变换(单应性) im_temp = cv2.warpPerspective(img_src,h,(img_dst.shape[1],img_dst.shape[0])) cv2.fillConvexPoly(img_dst,four_point.astype(int),0,16) #照片叠加 img_dst = img_dst + im_temp cv2.namedWindow("Image", 0) cv2.imshow("Image",img_dst) cv2.imwrite('Image.png',img_dst)#照片保存 cv2.waitKey(0) #---第5步:调用main函数--- if __name__ =='__main__': main()
效果展示
描绘啦四个点后,点击enter 就可以啦
得到的图
当然也可以随意描点
作者:电气-余登武。
原文CSDN博文链接: