3.3对图像进行移动、旋转、定义图框大小、翻转、裁剪
import cv2 as cv
import numpy as np
# 引用opencv和numpy库
img = cv.imread('photos/ironman.jpg')
cv.imshow('ironman',img)
# Translations
def translate(img,x,y):
# 定义函数
transMat = np.float32([[1,0,x],[0,1,y]])
# 通过NumPy定义了一个浮点形式平移矩阵transMat,它将决定平移多少像素
# 数位的区别:在内存中占分别32和64个bits,也就是4bytes或8bytes,数位越高浮点数的精度越高
# 第一个参数表示的是[1,0,x],其中x表示图像将向左或向右移动的距离,
# 如果x是正值,则表示向右移动,如果是负值的话,则表示向左移动。
# 第二个表示的是[0,1,y],其中y表示图像将向上或向下移动的距离,
# 如果y是正值的话,则向下移动,如果是负值的话,则向上移动。
dimensions = (img.shape[1],img.shape[0])
# 引用dimensions表征 图片的大小 width和height
return cv.warpAffine(img,transMat,dimensions)
# 仿射变换:图片中的一个像素点,通过某种变换,移动到另外一个地方。
# “线性变换”+“平移”:一个向量空间进行一次线形变换并加上平移向量,
# 从而变换到另外一个向量空间的过程。
# 第一个参数表示变换的图片,第二个参数表征平移矩阵,第三个表示希望展示的结果图片的大小
# 两个变换函数cv2.warpAffine cv2.warpPerspective
# 使用这两个函数你可以实现所有类型的变换。
# 前者接收的参数是2*3的变换矩阵,后者接收的是3*3的变换矩阵
# -y -->up
# -x -->left
# y -->down
# x -->right
translated = translate(img,100,100)
cv.imshow('Translated', translated)
# Rotation
# 矩阵中,[0]表示行数,[1]表示列数
# img.shape[:2]-->彩色图片的长、宽
# img.shape[:3]-->彩色图片的长、宽、通道
# img.shape[0]图像的垂直尺寸(高度)
# img.shape[1]图像的水平尺寸(宽度