矩阵中的每个像素由(x,y)组成,所谓的图像平移就是在矩阵上平移,横向平移就是给x加值,纵向平移在y上加值。
src:要缩放的图像
dst:目的,在c++中,需要一个输出参数,在python中不需要这个,我们只需要用“=”赋值给目的图像。
dsize:缩放的目标的大小
fx,fy=分别是x轴和y轴的缩放因子。(dsize与fx,fy冲突,如我们定义了dsize,就不再需要fx,fy了,反之,亦然)
interpolation:插值算法,参数有如下几种
INTER_NEAREST,邻近插值,速度快,效果差
INTER_LINEAR,双线性插值,利用原图中的四个点(默认)
INTER_CUBIC,三次插值,利用原图中的16个点
INTER_AREA,效果最好
算法原理https://blog.csdn.net/weixin_41466575/article/details/113058802
图像的翻转与图像旋转不同,旋转是转一定度数,翻转是上下翻转,左右翻转
flipCode==0,表示上下翻转
flipCode>0,表示左右翻转
flipCode<0,表示上下左右翻转
算法原理:https://zhuanlan.zhihu.com/p/109099445
API:cv2.rotate(img,rotateCode) # 这个API无法旋转任意角度
rotateCode参数值:
ROTATE_90_CLOCKWISE(顺时针90°旋转)
ROTATE_180(180°旋转)
ROTATE_90_COUNTERCLOCKWISE(逆时针90°旋转)
import cv2
import numpy as np
img = cv2.imread('d:\\download\\2.jpg')
img1 = cv2.resize(img, (600, 400)) # (宽,高),dsize是根据(X,Y),而img.shape输出的是(y,x)
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
print('旋转之前的矩阵', np.array(img2))
# print('翻转之前的矩阵', np.array(img2))
# img3 = cv2.flip(img2, 0) # 上下翻转
# img3 = cv2.flip(img2, 1) # 左右翻转
# # img3 = cv2.flip(img2, -1) # 上下左右翻转
# img3 = cv2.rotate(img2, cv2.ROTATE_90_CLOCKWISE) # 顺时针旋转90°
img3 = cv2.rotate(img2, cv2.ROTATE_180) # 旋转180°
# print('翻转之后的矩阵', np.array(img3))
print('旋转之后的矩阵', np.array(img3))
cv2.imshow('img2', img2)
cv2.imshow('img3', img3)
key = cv2.waitKey(0)
if key & 0xFF == ord('q'):
cv2.destroyAllWindows()