栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

图形变化前后的矩阵求解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

图形变化前后的矩阵求解


比如 一个矩形 它的四个点 都知道

然后 对它进行旋转 缩放 旋转 镜像 等一系列操作 均为线性变换
得到了最终的图形 而且 最后这个图形的四个点 也是已知的

求 最开始的形状 到 最终形状 的矩阵?


如:
一个 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)


其中的 求矩阵 算法,着实令人着迷

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号