16.图像的仿射变换

什么是仿射变换?
仿射变换是图像旋转、缩放、平移的总称

仿射变换API :

warpAffine(src,M,dsize,flags,mode,value)

src:源图像

M:变换矩阵

dsize 输出尺寸大小

flag:与resize中的插值算法一致(见上一篇文章)

mode:边界外推法标志

value:填充边界的值

1.图像的平移—平移矩阵

矩阵中的每个像素由(x,y)组成

图像的平移就是在(x,y)上加值

因为像素是由两个元素(x,y)组成,所以变换矩阵是2*2矩阵

平移向量为2*1的向量,所在平移矩阵为2*3矩阵

#仿射变换的核心就是变换矩阵

import cv2
import numpy as np

img = cv2.imread('C:\\Users\\Mengyang\\Desktop\\112.png')
M = np.float32([[1,0,100],[0,1,0]])  #创建一个2*2的单位矩阵,增加一个偏移量,向右横移100

h, w, ch = img.shape   #获取图片的信息   高  宽  通道数

new = cv2.warpAffine(img,M,(w,h))

cv2.imshow('img',img)
cv2.imshow('new',new)

cv2.waitKey(0)

 2.仿射变换之获取变换矩阵(一)

getRotationMatrix2D(center,angle,scale)

center   中心点

angle   旋转角度,逆时针

scale   缩放比例

#仿射变换的核心就是变换矩阵

import cv2
import numpy as np

img = cv2.imread('C:\\Users\\Mengyang\\Desktop\\112.png')
h, w, ch = img.shape   #获取图片的信息   高y  宽x  通道数
#M = np.float32([[1,0,100],[0,1,0]])  #创建一个2*2的单位矩阵,增加一个偏移量,向右横移100

#通过API创建变换矩阵
#旋转的角度为逆时针,中心点是(x,y)
#M = cv2.getRotationMatrix2D((100,100),15,1.0)   #中心点  旋转角度  缩放比例1.0
# 中心旋转
M = cv2.getRotationMatrix2D((w/2,h/2),15,0.5) 

#如果想要改变新图像的尺寸,需要修改dsize
new = cv2.warpAffine(img,M,(int(w/2),int(h/2)))

#new = cv2.warpAffine(img,M,(w,h))

cv2.imshow('img',img)
cv2.imshow('new',new)

cv2.waitKey(0)

  2.仿射变换之获取变换矩阵(二)

通过点来确定变换的位置,横着两点确定一条直线,竖着两点确定一条直线

getAffineTransform(src[], dst[])

src[]   原坐标点

dst[]   目标坐标点

通过三个点就可以确定变换的位置

#仿射变换的核心就是变换矩阵

import cv2
import numpy as np

img = cv2.imread('C:\\Users\\Mengyang\\Desktop\\112.png')
h, w, ch = img.shape   #获取图片的信息   高y  宽x  通道数
#M = np.float32([[1,0,100],[0,1,0]])  #创建一个2*2的单位矩阵,增加一个偏移量,向右横移100,创建变换矩阵

#通过API创建变换矩阵
#旋转的角度为逆时针,中心点是(x,y)
#M = cv2.getRotationMatrix2D((100,100),15,1.0)   #中心点  旋转角度  缩放比例1.0

#M = cv2.getRotationMatrix2D((w/2,h/2),15,0.5)  # 中心旋转

src = np.float32([[10,20],[100,100],[200,300]])  #选择3个点,注意这三个点一定要在原图上
dst = np.float32([[60,20],[150,100],[250,300]])  #目标点,横坐标右移50

#获取变换矩阵方法2
M = cv2.getAffineTransform(src, dst)

#如果想要改变新图像的尺寸,需要修改dsize
#new = cv2.warpAffine(img,M,(int(w/2),int(h/2)))

new = cv2.warpAffine(img,M,(w,h))

cv2.imshow('img',img)
cv2.imshow('new',new)

cv2.waitKey(0)

猜你喜欢

转载自blog.csdn.net/qq_45355603/article/details/124459731