2021-01-14

数据增强方式

一、平移
平移通过自定义平移矩阵以及函数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)


二、镜像
翻转通过函数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)


三、缩放
缩放通过**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)


四、旋转
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)


五、仿射
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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山东金针菇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值