700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 基于OpenCV做图像数据增强(平移 镜像 缩放 旋转 仿射)

基于OpenCV做图像数据增强(平移 镜像 缩放 旋转 仿射)

时间:2019-02-08 07:28:39

相关推荐

基于OpenCV做图像数据增强(平移 镜像 缩放 旋转 仿射)

前言:

基于OpenCV的基本使用,对图像的数据量进行数据增强,使得框架对神经网络进行训练,提高模型的鲁棒性以及准确性。

原图:

1、平移

平移通过自定义平移矩阵以及函数warpAffine实现:

代码示范:

import numpy as npimport cv2img=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 cv2img=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 cv2img=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 cv2img=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 npimport 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)

效果图:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。