1.图像翻转
先导入opencv
import cv2
使用cv2.flip(img,num)来对图像进行翻转,其中img为要进行翻转的图像,num为翻转参数,0为垂直翻转,1为水平翻转,-1为水平垂直翻转,返回值为翻转后的图像。
2.图像裁剪
将图像视为一个三维数组,即[图像长,图像宽,通道数]。对图像数组进行切片操作可实现裁剪效果,如img[100:200,:]表示裁剪图像从长度100到长度200,得到一个长为100,宽不变的一个裁剪图像。这里需要注意的是图像的坐标的原点是图像的左上角。
3.调整图像亮度
一个简单的思想是先把图像转换成numpy矩阵,在用这个矩阵乘以某个系数就可以实现亮度的变化,比如*1表示亮度不变,*0.5表示亮度减少一半,*1.5表示亮度增加一半,原因是图像表示色彩的像素值越接近0就越暗,越接近255就越亮(通常都为8bit表示色彩)。这里要注意两点,一是只有numpy矩阵可以实现矩阵与数值相乘,python的二维数组不可以这样操作;二是当numpy的值超出类型的上限之后会截取掉超出的部分,所以直接使用numpy乘以某个亮度系数可能会出现意想不到的情况,所以这里可以定义一个方法,输入图像矩阵,遍历三个通道的矩阵的每个元素,每个元素乘以亮度系数,对结果取整,并且做一个判断,如果像素值超出255就设为255。
4.图像色调变换
图像的色调取反比较简单,直接用255-img就可以得到色调取反的图像,这里img是numpy的图像矩阵。转换成灰度图可以使用cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)来把图像转换为灰度图,这里要注意图像的通道,这里是RGB,而不是BGR。灰度图的取反与彩图的同理。调整图像的饱和度就要使用到图像的hsv形式,可以用cv2.cvtColor(image, cv2.COLOR_RGB2HSV)转换,转换后图像就变成了[色相,饱和度,明度],这里可以用到调整亮度的思想,对饱和度通道乘以一个饱和度系数即可实现图像的饱和度增加或减少。
在实际开发中,如果使用飞桨提供的开发套件,这些数据扩增操作都已经内置了,只需要更改配置项就可以了。