import cv2
import math
import numpy as np
class Img:
def __init__(self,image,center=[0,0]):
self.src=image #原始图像
self.rows=image.shape[0] #原始图像的行
self.cols=image.shape[1] #原始图像的列
self.center=center #旋转中心,默认是[0,0]
def Move(self,delta_x,delta_y): #平移
#delta_x>0左移,delta_x<0右移
#delta_y>0上移,delta_y<0下移
self.transform=np.array([[1,0,delta_x],[0,1,delta_y],[0,0,1]]).astype('float64')
def Zoom(self,factor): #缩放#factor>1表示缩小;factor<1表示放大
self.transform=np.array([[factor,0,0],[0,factor,0],[0,0,1]]).astype('float64')
def Horizontal(self): #水平镜像
self.transform=np.array([[1,0,0],[0,-1,self.cols-1],[0,0,1]]).astype('float64')
def Vertically(self): #垂直镜像
self.transform=np.array([[-1,0,self.rows-1],[0,1,0],[0,0,1]]).astype('float64')
def Rotate(self,beta): #旋转
#beta>0表示逆时针旋转;beta<0表示顺时针旋转
self.transform=np.array([[math.cos(beta),-math.sin(beta),0],
[math.sin(beta), math.cos(beta),0],
[ 0, 0, 1]]).astype('float64')
def Process(self):
#dst = cv2.warpAffine(self.src,self.transform,(self.cols ,self.rows)) #进行仿射变换
dst = cv2.warpPerspective(self.src, self.transform, (self.cols, self.rows)
return dst
'''
img.Rotate(-math.radians(180)) #旋转
out =img.Process()
img.Move(-50,-50) #平移
out =img.Process()
#_x>0左移,x<0右移
#_y>0上移,y<0下移
img.Zoom(0.5) #缩放
out =img.Process()
img.Vertically() #镜像
out =img.Process()
'''
if __name__=='__main__':
src=cv2.imread('E:\\workfile\\learning\\image file\\g_tools.jpg')
img=Img(src,center = [0,0])
img.Move(-500,-500) #平移
#img.Rotate(-math.radians(10)) # >0表示逆时针旋转;beta<0表示顺时针旋转
out = img.Process()
cv2.namedWindow('out',cv2.WINDOW_NORMAL)
cv2.imshow('out', out)
cv2.imwrite('E:\\workfile\\learning\\img2\\g22.jpg',out)
cv2.waitKey(0)