仿射变换是指图像可以通过一系列的几何变换来实现平移、旋转等多种操作。该变 换能够保持图像的平直性和平行性。平直性是指图像经过仿射变换后,直线仍然是 直线;平行性是指图像在完成仿射变换后,平行线仍然是平行线。
#图像的仿射变换
import numpy as np
import cv2
def translate(img,x,y):
"""
:param img:原始图像数据
:param x: 平移的x坐标
:param y: 平移的Y坐标
:return: 返回平移后的图像
"""
h,w = img.shape[:2]#获取图像高,宽
#定义平移矩阵
M = np.float32([[1,0,x],[0,1,y]])
#使用opencv仿射操作实现平移变换
shifted = cv2.warpAffine(img,M,(w,h))
return shifted
def rotate(img,angle,center=None,scale = 1.0):
"""
:param img:原始图像数据
:param angle:旋转角度
:param center:旋转中心,如果为None则以原图中心为旋转中心
:param scale:缩放比例,默认为1,1.0就是不进行缩放
:return:返回旋转后的图像
"""
h,w = img.shape[:2]## 获取图像高、宽切出0和1嘛
#旋转中心默认是图像中心
if center is None:
center = (w/2,h/2)
# 计算旋转矩阵
M = cv2.getRotationMatrix2D(center,angle,scale)
#使用opencv仿射变换实现函数的旋转
rotateed = cv2.warpAffine(img,M,(w,h))
return rotateed
if __name__ == '__main__':
#读取并显示原始图像
#图像进行平移的时候,正负号的判断左负右正,下正上负
im = cv2.imread("../dataset/data/Linus.png")
cv2.imshow("SrcImg",im)
#图像向下移动50个元素
shifed = translate(im,0,50)
cv2.imshow("shifed",shifed)
#图像向左移动40,下移动40像素
shifted = translate(im,-40,40)
cv2.imshow("Shifted2",shifted)
# #逆时针旋转45度
# rotated = rotate(im,45)
# cv2.imshow("rotated1",rotated)
# #顺时针旋转90度
# rotated = rotate(im,-90)
# cv2.imshow("rorated2",rotated)
cv2.waitKey()
cv2.destroyAllWindows()