前言:
基于OpenCV的基本使用,对图像的数据量进行数据增强,使得框架对神经网络进行训练,提高模型的鲁棒性以及准确性。
原图:
1、平移
平移通过自定义平移矩阵以及函数warpAffine实现:
代码示范:
import numpy as np
import cv2
img=cv2.imread("lena.png")
#平移矩阵[[1,0,-100],[0,1,-12]]
M=np.array([[1,0,-100],[0,1,-12]],dtype=np.float32)
img_change=cv2.warpAffine(img,M,(300,300))
cv2.imshow("test",img_change)
cv2.waitKey(0)
效果图:
2、镜像
翻转通过函数flip实现:
函数说明:
cv2.flip(src, flipCode, dst) → dst
参数说明:
src – 输入的图像
dst – 输出的图像
flipCode – 翻转模式:①flipCode==0垂直翻转(沿X轴翻转);②flipCode>0水平翻转(沿Y轴翻转);③flipCode<0水平垂直翻转(先沿X轴翻转,再沿Y轴翻转,等价于旋转180°)
代码示范:
import cv2
img=cv2.imread("lena.png")
cv2.imshow("original",img)
#水平镜像
h_flip=cv2.flip(img,1)
cv2.imshow("Flipped Horizontally",h_flip)
#垂直镜像
v_flip=cv2.flip(img,0)
cv2.imshow("Flipped Vertically",v_flip)
#水平垂直镜像
hv_flip=cv2.flip(img,-1)
cv2.imshow("Flipped Horizontally & Vertically",hv_flip)
cv2.waitKey(0)
3、缩放
缩放通过**cv2.resize()**实现
函数说明:
cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)
参数说明:
scr:原图
dsize:输出图像尺寸
fx:沿水平轴的比例因子
fy:沿垂直轴的比例因子
interpolation:插值方法
代码示范:
import cv2
img=cv2.imread("lena.png")
cv2.imshow("original",img)
height,width=img.shape[:2]
res=cv2.resize(img,(2*width,2*height))
cv2.imshow("large",res)
cv2.waitKey(0)
效果图:
3、旋转
OpenCV中对图像的旋转主要是先通过getRotationMatrix2D函数得到图像的旋转矩阵,然后再通过仿射变换函数warpAffine得到旋转后的图像。
函数说明:
cv2.getRotationMatrix2D(center, angle, scale)
cv2.warpAffine(src, M, dsize,dst=None,flags=None,borderMode=None,borderValue=None)
参数说明:
getRotationMatrix2D:
center:表示旋转的中心点
angle:表示旋转的角度degrees
scale:图像缩放因子
warpAffine:
src:输入的图像
M:2 X 3 的变换矩阵.
dsize:输出的图像的size大小
dst:输出的图像
flags:输出图像的插值方法
borderMode:图像边界的处理方式
borderValue:当图像边界处理方式为BORDER_CONSTANT时的填充值
代码示范:
import cv2
img=cv2.imread("lena.png")
cv2.imshow("original",img)
rows,cols=img.shape[:2]
#90度旋转
M=cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
dst=cv2.warpAffine(img,M,(cols,rows))
cv2.imshow("90",dst)
cv2.waitKey(0)
效果图:
4、仿射
OpenCV中对图像的旋转主要是先通过getAffineTransform函数得到图像的变换矩阵,然后再通过仿射变换函数warpAffine得到变换后的图像。
函数说明:
cv2.getAffineTransform(scr,dst)
代码示范:
import numpy as np
import cv2
#对图像进行变换(三点得到一个变换矩阵)
# 我们知道三点确定一个平面,我们也可以通过确定三个点的关系来得到转换矩阵
# 然后再通过warpAffine来进行变换
img=cv2.imread("lena.png")
cv2.imshow("original",img)
rows,cols=img.shape[:2]
point1=np.float32([[50,50],[300a,50],[50,200]])
point2=np.float32([[10,100],[300,50],[100,250]])
M=cv2.getAffineTransform(point1,point2)
dst=cv2.warpAffine(img,M,(cols,rows),borderValue=(255,255,255))
cv2.imshow("1",dst)
cv2.waitKey(0)
效果图: