比如 一个矩形 它的四个点 都知道
然后 对它进行旋转 缩放 旋转 镜像 等一系列操作 均为线性变换
得到了最终的图形 而且 最后这个图形的四个点 也是已知的
求 最开始的形状 到 最终形状 的矩阵?
如:
一个 1024 * 700 的图形, 在Photoshop中经过一系列的变化, 结果如右侧显示,
其中经过旋转缩放错切镜像等不同的操作, 且顺序等未知,
现用 python 代码将图形进行变化, 结果和PS的最终效果一致
import cv2
import numpy as np
filePath = "t.jpg"
img = cv2.imread(filePath, 1)
img = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
# 在图片上的 左上 右上 右下 分别画红绿蓝的圆圈作标记
cv2.circle(img, [0, 0], 15, (0, 0, 255), 4)
cv2.circle(img, [1024, 0], 15, (0, 255, 0), 4)
cv2.circle(img, [1024, 700], 15, (255, 0, 0), 4)
# 得到图片的高和宽
imgH, imgW = img.shape[:2]
# 取图片上的三个点 左上 右上 右下
posOri = np.float32([
[0, 0],
[1024, 0],
[1024, 700]
])
# 在PS中取变化后图片上的三个点 左上 右上 右下
posRes = np.float32([
[1345, 497],
[0, 0],
[54, 560]
])
# 获取原图到最终图片中的变换矩阵M (这里面的算法未知)
M = cv2.getAffineTransform(posOri, posRes)
# 将原图和矩阵进行变换,得到变换后的图像
imgRes = cv2.warpAffine(img, M, (imgW * 2, imgH * 2),
flags=cv2.INTER_LINEAR,
borderMode=cv2.BORDER_TRANSPARENT,
borderValue=(0, 255, 255, 0.5))
#绘制原图的位置
cv2.rectangle(imgRes, [0, 0], [1024, 700], (255, 0, 255), 2, 8)
# 显示及保存处理后的图像(透明)
cv2.imshow("imgRes", imgRes)
cv2.imwrite("res.png", imgRes)
cv2.waitKey(0)
其中的 求矩阵 算法,着实令人着迷



