OpenCV:图像平移、图像缩放、图像旋转、仿射变换、投影

OpenCV:图像平移、图像缩放、图像旋转、仿射变换、投影

import numpy as np

import cv2

def PY(img, x, y):
    H = np.float32([[1, 0, x], [0, 1, y]])      #x,y方向移动距离
    h, w = img.shape[:2]         #得到修改图像大小的参数,可自行设定
    print(h, w)
    py = cv2.warpAffine(img, H, (w, h))
    '''仿射变换函数:cv2.warpAffine(src, M, dsize, flags, borderMode, borderValue)
    src:输入图像
    M:变换矩阵
    desize:输出图像大小
    flags:插值方式的组合(int类型)
    borderMode:边界像素模式
    borderValue:边界填充值,默认为0
    其中:
    M为InputArray类型的2*3的变换矩阵
    flages表示插值方式,默认cv2.INTER_LINEAR(线性插值)
    还有:cv2.INTER_NEAREST(最近邻插值)
    cv2.INTER_AREA(区域插值)
    cv2.INTER_LANCZOS4(Lanczos插值)
    '''
    cv2.imshow('平移', py)

def SF(img, x, y):
    # sf = cv2.resize(img, None, fx=x, fy=y, interpolation=cv2.INTER_NEAREST)       #使用缩放倍数
    sf = cv2.resize(img, [600, 1200], interpolation=cv2.INTER_NEAREST)      #使用dsize
    cv2.imshow('缩放', sf)
    '''
    cv2.resize(src, dsize, fx, fy, interpolation)
    src输入图像
    dsize输出图像尺寸
    fx, fy缩放倍数      与dsize二选一
    interpolation插值方式
    
    默认cv2.INTER_LINEAR(线性插值)
    还有:cv2.INTER_NEAREST(最近邻插值)
    cv2.INTER_AREA(区域插值)
    cv2.INTER_LANCZOS4(Lanczos插值)
    '''

def XZ(img, x, y):
    h, w = img.shape[:2]
    H = cv2.getRotationMatrix2D([h/2, w/2], x, y)
    '''cv2.getRotationMatrix2D(center, angle, scale)
    center旋转中心
    angle旋转角度
    scale缩放比例,正逆负顺
    -5表示:顺时针旋转,并将图片放大两倍
    为负值时好像有问题
    '''
    xz = cv2.warpAffine(img, H, (w, h))
    cv2.imshow('旋转', xz)

def FS(img):
    h, w = img.shape[:2]
    pos1 = np.float32([[50, 290], [200, 80], [200, 500]])        #三点组成一个三角形
    pos2 = np.float32([[350, 290], [200, 80], [200, 500]])      #变换后的三角形对比原始三角形,图形对应进行修改
    M = cv2.getAffineTransform(pos1, pos2)
    '''cv2.getAffineTransform(pos1, pos2)
    需要三个点
    pos1变换前位置
    pos2变换后位置
    '''
    fs = cv2.warpAffine(img, M, (w, h))
    cv2.imshow('仿射变换', fs)

def TY(img):
    h, w = img.shape[:2]
    pos1 = np.float32([[50, 50], [50, 200], [200, 50], [200, 200]])
    pos2 = np.float32([[50, 90], [100, 100], [200, 100], [300, 200]])
    M = cv2.getPerspectiveTransform(pos1, pos2)
    ty = cv2.warpPerspective(img, M, (w, h))
    cv2.imshow('投影', ty)


img = cv2.imread('可莉.png')
img = cv2.resize(img, [384, 683])       #修改的是[w, h]
cv2.imshow('原图', img)
PY(img, 50, 100)
SF(img, 2, 2)
XZ(img, 30, 1)
FS(img)
TY(img)


cv2.waitKey()
cv2.destroyAllWindows()


参考:

https://www.bilibili.com/video/BV1xe4y1R7j2/?spm_id_from=333.788&vd_source=b89ce2a9b55dab86caa0ee60b66c9f86

你可能感兴趣的:(opencv,python,人工智能)