仿射变换可以用来平移图像:
进行仿射变换的图像与原图像相比,保持其平直性和平行性。
dst = cv2.warpAffine(src, m, dsize, flags, borderMode, bordervalue)
参数说明:
- src:原图
- dst:结果图像
- m:变换矩阵(2*3的矩阵)[[1, 0, dx],[0, 1, dy]]
- disze:窗口尺寸 (宽(列),高(行))
- flags:插值方式
- borderMode:边类型。
- bordervalue:边界值,默认0
# 平移 构建平移矩阵
import cv2 as cv
import numpy as npimg = cv.imread("picture\lena.jpg")
h, w = img.shape[:2]# 移动的距离
x = 50
y = 50# 构建矩阵 float32型 2*3的矩阵
m = np.float32([[1, 0, x], [0, 1, y]])# 仿射变换进行图像平移 原图像 平移矩阵 dsize尺寸(窗口的尺寸)
dst = cv.warpAffine(img, m, (w, h))cv.imshow('demo', dst)
cv.waitKey()
cv.destroyAllWindows()
文章图片
复杂的仿射变换:可以进行平移 旋转等,由函数cv2.getAffineTransform()获取转换矩阵。
m = cv2.getAffineTransform(src, src1):
src:原图像的三个点坐标.(左上角,右上角,左下角)
src1:结果图像的对应的三个点坐标。
m:转换矩阵
注意:生成三个点的坐标矩阵时用np.float32(一个包括三个点坐标的二维数组)。
# 仿射变换中原图像平行的线,变换后也要平行。转换矩阵由函数获得。import cv2 as cv
import numpy as npimg = cv.imread("picture\\timg.jpg")
rows, cols = img.shape[:2]plt1 = np.float32([[50, 50],[150, 50],[50, 150]])
plt2 = np.float32([[100, 100],[200, 100],[100, 200]])m = cv.getAffineTransform(plt1, plt2)dst = cv.warpAffine(img, m, (cols, rows))cv.imshow('demo', img)
cv.imshow('demo2', dst)cv.waitKey()
cv.destroyAllWindows()
【opencv|opencv 几何变换之仿射变换】
文章图片
推荐阅读
- #|【opencv】关于透视变换
- OpenCV|Opencv中使用Surf特征实现图像配准及对透视变换矩阵H的平移修正
- OpenCV|OpenCV C++案例实战四《图像透视矫正》
- 算法|【机器学习】基于Logistic Regression的新冠肺炎CT影像识别
- opencv|python-opencv给图像添加高斯噪声
- 计算机视觉|基于聚类的图像分割-Python
- 计算机视觉|opencv学习笔记之绘制图像直方图
- 深度学习|将多类分割灰度标签图转RGB三通道图
- 计算机视觉|TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)