图像旋转平移变换py opencv

// An highlighted block


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)

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值