# 不用 PS 抠图，Python + OpenCV 实现自动海报场景替换！

• 确定至少四组对应点坐标
• 找到一个转换矩阵；
• 把找到的转换矩阵应用到 Moving Image(需要移动的图片) 上，实现图像对齐

作为对应点，则 Homography  的的应用 如下：

import cv2
import numpy as np
if __name__ =='__main__':
#图片读取
position_src = np.array([[141,131],[480,159],[493,630],[64,601]],dtype = float)
position_dst = np.array([[318,256],[543,372],[316,670],[73,473]],dtype = float)
#计算转换矩阵
h,status = cv2.findHomography(position_src,position_dst)
#对图片进行仿射变换
out_img = cv2.warpPerspective(img_src,h,(img_dst.shape[1],img_dst.shape[0]))
#Display images;
cv2.imshow("Source image",img_src)
cv2.imshow("Destination Image",img_dst)
cv2.imshow("Warped Source Image",out_img)
cv2.waitKey(0)

def mouse_handler(event,x,y,flags,data):
if event ==cv2.EVENT_LBUTTONDOWN:
cv2.circle(data['im'],(x,y),3,(0,0,255),5,16)
cv2.namedWindow("Image",0)
cv2.imshow("Image",data['im'])
if len(data['points']) <4:
data['points'].append([x,y])
def get_four_points(im):
data = {}
data['im'] = im.copy()
data['points'] = []
# Set the callback function for any mouse event
cv2.namedWindow("Image", 0)
cv2.imshow('Image',im)
#请注意你标记点的数据，是顺时针，需要与pst_src 方向一致
cv2.setMouseCallback("Image",mouse_handler,data)
cv2.waitKey(0)
# Convert array to np.array
#竖直方向堆叠起来;;;
points = np.vstack(data['points']).astype(float)
return points

if __name__ =='__main__':
size = img_src.shape
# 取得四个坐标
pst_src = np.array(
[
[0,0],[size[1]-1,0],
[size[1]-1,size[0]-1],
[0,size[0]-1]
],dtype=float
)
#Read the destination image
print("Click on four corners of bllboard and the press ENTER")
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)
#add wraped source image to destination image
img_dst = img_dst + im_temp
cv2.namedWindow("Image", 0)
cv2.imshow("Image",img_dst)
cv2.waitKey(0)

|
3天前
|

20 0
|
9天前
|

32 0
|
9天前
|

24 0
|
9天前
|
Python
2024年最新【Python从零到壹】Python模块介绍与使用(1)，2024年最新阿里面试场景题
2024年最新【Python从零到壹】Python模块介绍与使用(1)，2024年最新阿里面试场景题
22 0
|
14天前
|

【Python实战】——Python+Opencv是实现车牌自动识别
【Python实战】——Python+Opencv是实现车牌自动识别
25 2
|
14天前
|

20 1
|
14天前
|

opencv python 图片叠加
【4月更文挑战第17天】
41 0
|
14天前
|

34 1
|
14天前
|

opencv 图像金字塔(python)
opencv 图像金字塔(python)
26 0
|
14天前
|

opencv 绘图及交互(python)
opencv 绘图及交互(python)
27 0