失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 数据增强--缩放 调整亮度与对比度 翻转 旋转 添加噪声 模糊

数据增强--缩放 调整亮度与对比度 翻转 旋转 添加噪声 模糊

时间:2020-12-04 17:26:35

相关推荐

数据增强--缩放 调整亮度与对比度 翻转 旋转 添加噪声 模糊

数据增强:

数据通过某种变换操作,从而生成新数据的过程

采用的部分方式:

缩放、调整亮度与对比度、翻转、旋转、添加噪声、模糊

1.缩放

#导入库import cv2import numpy as nppic = cv2.imread("01.jpg") #读入图片height,width = pic.shape[:2] #获取图片的高和宽#将图像缩小为原来的0.5倍pic_zoom = cv2.resize(pic, (width*0.5,height*0.5), interpolation=cv2.INTER_CUBIC)# cv2.resize(图像变量 ,(宽,高), 插值方法) cv2.imshow('zoom', pic_zoom) #显示图片cv2.waitKey(0) cv2.destroyAllWindows()

cv2.resize(图片变量,(宽,高,颜色通道),插值方法) #颜色通道可略

#注意:先行后列,即先宽后高,与获取图片shape时相反(opencv: cv2.resize 探究(源码))

关于插值方法可参考:/posts/comparison-of-openv-interpolation-algorithms/

2.调整亮度与对比度

(1)方法一 cv2.addWeighted()

#导入库import cv2import numpy as nppic = cv2.imread("01.jpg") #读入图片contrast = 1 #对比度brightness = 100 #亮度pic_turn = cv2.addWeighted(pic,contrast,pic,0,brightness)#cv2.addWeighted(对象,对比度,对象,对比度)'''cv2.addWeighted()实现的是图像透明度的改变与图像的叠加'''cv2.imshow('turn', pic_turn) #显示图片cv2.waitKey(0) cv2.destroyAllWindows()

图像混合( cv2.addWeighted() )

这也是图像添加,但是对图像赋予不同的权重,使得它具有混合感或透明感。图像按以下等式添加:

通过改变[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aar4L0MT-1577624055045)(/3.0-beta/_images/math/69777408db155ee0fca9cc9dee60a269df6d1f96.png)]从右箭头1,您可以执行到另一个图像之间的过渡凉爽。

在这里,我拍了两张图片将它们混合在一起。第一图像的权重为0.7,第二图像的权重为0.3。cv2.addWeighted()在图像上应用以下等式。

[外链图片转存失败(img-n9UMplWg-1564208380704)(/3.0-beta/_images/math/ad472897a50e8e8c0c0bb6dab3f28ef7e6d1813e.png)]

这里被视为零。

img1 = cv2.imread('ml.png')img2 = cv2.imread('opencv_logo.jpg')dst = cv2.addWeighted(img1,0.7,img2,0.3,0)cv2.imshow('dst',dst)cv2.waitKey(0)cv2.destroyAllWindows()

result:

来源:/3.0-beta/doc/py_tutorials/py_core/py_image_arithmetics/py_image_arithmetics.html

推荐文章:Python-OpenCV 图像叠加or图像混合加权(cv2.addWeighted)

opencv: 图片 设置 透明度 并 叠加(cv2.addWeighted)

(2)方法二f(x)= contrast * g(x) + brightness

通过遍历图像的高度,宽度,通道数分别去改变它们对应的值:

def contrast_brightness_control( pic , contrast , brightness):for i in range(pic.shape[0]):for j in range(pic.shape[1]):for k in range(pic.shape[2]):if (pic[i][j][k] * contrast+ brightness<=255):pic[i][j][k] = pic[i][j][k] * contrast+ brightnesselse:pic[i][j][k] = 255return pictemp = contrast_brightness_control(pic, contrast, brightness)#感谢学长的代码

关于pic.shape[0]、 pic.shape[1]、 pic.shape[2]:

pic.shape[0]:图像中像素行的数量或图像阵列的每列中的像素数。

pic.shape[1]:图像中像素列的数量或图像阵列的每行中的像素数。

pic.shape[2]:用于表示每个像素的组件数。

参考:OpenCV Python – Get Image Size – Example

3.翻转

import cv2pic = cv2.imread(“01.jpg”) #读入图片h_pic = cv2.flip(pic, 1)#水平翻转cv2.imshow(“overturn-h”, h_pic)v_pic = cv2.flip(pic, 0)#垂直翻转cv2.imshow(“overturn-v”, v_pic)hv_pic = cv2.flip(pic, -1)#水平垂直翻转cv2.imshow(“overturn-hv”, hv_pic)

cv2.flip(图像变量,翻转方式)

flip(img,1)#1代表水平方向旋转180度flip(img,0)#0代表垂直方向旋转180度flip(img,-1)#-1代表垂直和水平方向同时旋转

参考:OpenCV文档:/2.4/modules/core/doc/operations_on_arrays.html?highlight=flip#cv2.flip

4.旋转

import numpyimport cv2def rotate(image, angle, scale=1.0):height, width = image.shape[:2]#获取图像的高和宽center = (width / 2, height / 2) #取图像的中点M = cv2.getRotationMatrix2D(center, angle, scale)#获得图像绕着某一点的旋转矩阵 rotated = cv2.warpAffine(image, M, (height, width))#cv2.warpAffine()的第二个参数是变换矩阵,第三个参数是输出图像的大小return rotatedpic = cv2.imread(“01.jpg”)angle = 45temp = rotate(pic, angle)

关于变换矩阵:

OpenCV-Python:图像的几何变换(平移、旋转、仿射变换等)

OpenCV文档:/2.4/modules/imgproc/doc/geometric_transformations.html?highlight=cv2.warpaffine#cv2.warpAffine

小贴士:日常进行仿射变换时,在只设置前三个参数的情况下,如

cv2.warpAffine(img,M,(height, width))可以实现基本的仿射变换效果,但可以出现“黑边”现象。而cv2.warpAffine(img,M,(height, width),borderValue=(255,255,255))可将图片边界区域填充为白色。

4.加入噪声

import cv2import numpyimport random #random模块用于生成随机数pic = cv2.imread(“01.jpg”)for i in range(1000):pic[random.randint(0, pic.shape[0]-1)][random.randint(0,pic.shape[1]-1)][:]=255cv2.imshow('pic_noise', pic)

其中random.randint():

import random#random.randint(a, b)#用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= bprint random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 print random.randint(20, 20) #结果永远是20 #print random.randint(20, 10) #该语句是错误的。下限必须小于上限

关于random的更多信息:/yd1227/archive//03/18/1988015.html

5.高斯模糊

import cv2import numpypic = cv2.imread(“01.jpg”)temp = cv2.GaussianBlur(pic, (7,7), 1.5)#cv2.GaussianBlur(图像,卷积核,标准差)cv2.imshow(“pic_blur”, temp)

这个不好懂

关于高斯模糊的原理可见 OpenCV 文档:/3.1.0/d4/d13/tutorial_py_filtering.html

如果觉得《数据增强--缩放 调整亮度与对比度 翻转 旋转 添加噪声 模糊》对你有帮助,请点赞、收藏,并留下你的观点哦!

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