OpenCV实现图像基本变换
图像的放大与缩小
- 图像缩放:resize(src,dst,dsize,fx,fy,interpolation)
- fx:x轴的缩放因子
- fy:y轴的缩放因子
- interpolation:差值算法
- INTER_NEAREST:邻近差值,速度快,效果差
- INTER_LINEAR:默认,双线性差值,原图中的四个点,快,效果好
- INTER_CUBIC:三次差值,原图中的16个点,较慢
- INTER_AREA:效果最好,速度最慢
import cv2
import numpy as np
people = cv2.imread('1.png')
new = cv2.resize(people,None,fx=3.0,fy=3.0,interpolation=cv2.INTER_AREA)
cv2.imshow('people',people)
cv2.imshow('new',new)
cv2.waitKey(0)
图像翻转
- flip(img,flipCode)
- flipCode==0 上下翻转
- flipCode>0 左右翻转
- flipCode<0 上下+左右翻转
import cv2
import numpy as np
people = cv2.imread('1.png')
new = cv2.flip(people,-1)
cv2.imshow('people',people)
cv2.imshow('new',new)
cv2.waitKey(0)
图像旋转
- rotate(img,retateCode)
- ROTATE_90_CLOCKWISE 转90度
- ROTATE_180 转180度
- ROTATE_90_COUNTERCLOCKWISE 转270度
import cv2
import numpy as np
people = cv2.imread('1.png')
new = cv2.rotate(people,cv2.ROTATE_90_CLOCKWISE)
cv2.imshow('people',people)
cv2.imshow('new',new)
cv2.waitKey(0)
图像的仿射变换
- 仿射变换是图像旋转、缩放、平移的总称
图像平移
- warpAffine(src,M,dsize,flags,mode,value)
- M:变换矩阵
- dsize:变换后输出尺寸大小
- flag:与resize中的差值算法一致
- mode:边界外推法标志
- value:填充边界的值
- 矩阵中的每个元素由(x,y)组成
- 因此,其变换矩阵是2*2的矩阵
- 平移向量为2 * 1的向量,所在平移矩阵为 2 * 3的矩阵
import cv2
import numpy as np
people = cv2.imread('1.png')
h,w,ch = people.shape
M = np.float32([[1,0,50],[0,1,0]])
new = cv2.warpAffine(people,M,(w,h))
cv2.imshow('people',people)
cv2.imshow('new',new)
cv2.waitKey(0)
变换矩阵
- getRotationMatrix2D(center,angle,scale)
- 通过一点轴变换
- center:中心点(x,y)
- angle:角度(按照逆时针旋转)
- scale:缩放比例
M = cv2.getRotationMatrix2D((w/2,h/2),30,1.5)
- getAffineTransform(src[],dst[])
- 通过三个点确定变换的位置
- src原
- dst目的
src = np.float32([[400,300],[800,300],[400,1000]])
dst = np.float32([[200,400],[600,500],[150,1100]])
M = cv2.getAffineTransform(src,dst)
透视变换
变换坐标系(可以将斜着的图片截取一部分并且变成正着)
-
warpPerspective(img,M,dsize,…)
- M:变换矩阵
- dsize:变换后输出尺寸大小
-
获取变换矩阵:getPerspectiveTransform(src,dst)
- 四个点
M = cv2.getPerspectiveTransform(src,dst)
new = cv2.warpPerspective(img,M,(2300,3000))