使用 OpenCV 计算单应性并包装图像以在 python 中选择区域的示例。
首先,加载您的 2D png 图像和横幅图像,横幅图像将替换白色区域。
import cv2
import numpy as np
img = cv2.imread("2D png image.png")
banner = cv2.imread("replace region img.jpg")
然后,手动选择四个角(图像中的沙发角)来定义替换区域。
#point sequence:top_left corner, top right corner, bottom left corner, bottom left corner
pt = np.array([[65,180], [122, 192], [122, 277], [67, 251]])
接下来,获取横幅图像的四个角。
#point sequence same as hand select :top_left corner, top right corner, bottom left corner, bottom left corner
pts_banner = np.array([[0, 0], [banner.shape[1] - 1, 0], [banner.shape[1] - 1, banner.shape[0] - 1], [0, banner.shape[0] - 1]])
接下来使用 OpenCV 计算单应矩阵并将图像包装到替换区域。
homographyMat, status = cv2.findHomography(pts_banner, pt)
result1 = cv2.warpPerspective(banner, homographyMat, (img.shape[1], img.shape[0]))
最后,遮光选择区域并将环绕图像添加到输入图像。
cv2.fillConvexPoly(img, pt, (0,0,0))
result2 = img + result1
cv2.imwrite("result.png", result2)
横幅图片:
输出:
参考:
https://anishdubey.com/virtual-billboard-homography-perspective-geometric-transformation-image-opencv