图像的变换
图像的缩放
- resize(src, dst, dsize, fx, fy, interpolation)
缩放算法
- INTER_NEAREST,邻近插值,速度快,效果差
- INTER_LINEAR,双线性插值,原图中的4个点
- INTER_CUBIC,三次插值,原图中的16个点
- INTER_AREA,效果最好,但速度较慢
import numpy as np
import cv2 as cv
dog = cv.imread('./dog.jpeg')
print(dog.shape)
# new = cv.resize(dog, (518, 442) )
new = cv.resize(dog, None, fx=2, fy=2, interpolation=cv.INTER_AREA)
cv.imshow('new', new)
cv.imshow('dog', dog)
cv.waitKey(0)
图像的翻转
flip(img,flipCode)
flipCode ==0,上下
flipCode>0,左右
flipCode<0,左右+上下
import numpy as np
import cv2 as cv
dog = cv.imread('./dog.jpeg')
new = cv.flip(dog, 0) # 上下翻转
new2 = cv.flip(dog, 1) # 左右翻转
new3 = cv.flip(dog, -1) # 左右翻转+上下翻转
cv.imshow('new', new)
cv.imshow('new2', new2)
cv.imshow("original", dog)
cv.imshow("new3", new3)
cv.waitKey(0)
图像的旋转
-rotate(img,rotateCode)
ROTATE_90_CLOCKWISE 顺时针90度
ROTATE_180
ROTATE_90_COUNTERCLOCKWISE 顺时针270度(反向的90度)
import cv2 as cv
import numpy as np
dog = cv.imread('./dog.jpeg')
new = cv.rotate(dog, cv.ROTATE_90_CLOCKWISE)
cv.imshow('90', new)
cv.imshow('old', dog)
cv.waitKey(0)
图像的仿射变换
仿射变换是图像的旋转,缩放,平移的总称
仿射API
- warpAffine(src,M,dsize,flags,mode,value)
- M: 变换矩阵
- dsize输出尺寸大小
- flags:与resize中的插值算法一致
- mode: 边界外推法标志
- value:填充边界的值
平移矩阵
- 矩阵中的每个像素由(X,Y)组成
- 因此,其变换矩阵是2x2的矩阵
- 平移向量为2X1的向量,所在平移矩阵为2x3矩阵
import cv2 as cv
import numpy as np
dog = cv.imread('./dog.jpeg')
h, w, ch = dog.shape
M = np.float32([[1, 0, 100],
[0, 1, 0]])
new = cv.warpAffine(dog, M, (w, h), )
cv.imshow('new', new)
cv.imshow('dog', dog)
cv.waitKey(0)
变化矩阵
- getRotationMatrix2D(center,angle,scale)
- center中心点
- angle角度(逆时针旋转)
- scale缩放比例
变化矩阵(2)
getAffineTransform(src[],dst[])
通过三个点可以确定变换的位置
import cv2 as cv
import numpy as np
dog = cv.imread('./dog.jpeg')
h, w, ch = dog.shape
# M = np.float32([[1, 0, 100],
# [0, 1, 0]])
# M = cv.getRotationMatrix2D((w/2, h/2), 15, 0.5) # 角度为逆时针
src = np.float32([[10,10],[20,15], [10,30]])
dst = np.float32([[15,25],[30,22], [100,250]])
M = cv.getAffineTransform(src, dst)
# 如果想改变新图像的尺寸,需要修改dsize
new = cv.warpAffine(dog, M, (w, h), )
cv.imshow('new', new)
cv.imshow('dog', dog)
cv.waitKey(0)
透视变换API
- warpPerspective(img,M,dsize)
- M是变换矩阵
- dsize是目标图像大小
变换矩阵
- getPersectiveTransfrom(src,dst)
- 四个点(图像的四个角)
import cv2 as cv
import numpy as np
img = cv.imread('2.jpg')
src = np.float32([[0,119],[121,69],[97,253],[251,150]])
dst = np.float32([[0,0],[200,0],[0,300],[200,300]])
M = cv.getPerspectiveTransform(src,dst)
new = cv.warpPerspective(img, M, (200,300))
cv.imshow('new', new)
cv.waitKey(0)

版权声明:本文为qq_41803556原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。