1.颜色通道提取
b, g, r = cv2.split(img) #将img的BGR拆分并赋到b,g,r上
img=cv2.merge((b,g,r)) #颜色通道合并
#注意顺序是BGR
2.色彩通道转换
Opencv API:
img = cv.cvtColor(src,code)
输入:1.src:待转换的图像 2.code:转换类型
类型例如:
cv.COLOR_BGR2RGB
cv.COLOR_BGR2GRAY
cv.COLOR_GRAY2BGR
cv.COLOR_BGR2HSV
输出:转化后的图像
3.绘制矩形
Opencv API:
cv2.rectangle(img,pt1,pt2,color,thickness,lineType)
输入:1.img:要绘制的图像,2.pt1 pt2:绘制的左上角与右下角,3.color:颜色,4.thickness:绘制图线宽度(可省略),5。lineType:线型 LINE_8(默认,更快), LINE_4 , LINE_AA(更美观)
4.边界填充
Opencv API:
img = cv2.copyMakeBorder(src, top_size, bottom_size, left_size, right_size, borderType)
输入:1.src:原图像 2.top_size,bottom_size,left_size,right_size 边界各填充多少 3.borderType填充方式
#BORDER_REPLICATE:复制法,也就是复制最边缘像素。
#BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
#BORDER_REFLECT_101:反射法2,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
#BORDER_WRAP:外包装法,cdefgh|abcdefgh|abcdefg 以原图片在边缘复制
#BORDER_CONSTANT:常量法,常数值填充。
5.图像的几何变换
1、什么是图像的几何变换?
图像的几何变换就是将一组图像数据经过某种数学运算,映射成另外一组图像数据的操作。所以,几何变换的关键就是要确定这种空间映射关系。
几何变换又称空间变换。对于图像数据来说,就是将一幅图像中的坐标位置映射到另一幅图像中的新坐标位置。或者说,几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排。
2、为什么要对图像进行几何变换?
对图像进行几何变换可以一定程度上的消除图像由于角度、透视关系、拍摄等原因造成的几何失真,进而造成计算机模型或者算法无法正确识别图像,所以我们要对图像进行几何变换。
几何变换不是取悦人眼的,是取悦计算机的,是让计算机(模型、算法)能更好的认识图片的。所以,对图像进行几何变换处理是深度学习中数据增强的一种常用手段,是进行图像识别前的数据预处理工作内容。
比如,在很多机器视觉落地项目中,在实际工作中,我们并不能保证被检测的物体在图像的相同位置和方向,所以我们首先要解决的就是被检测物体的位置和方向。所以我们首先要做的就是对图像进行几何变换。
a.图像的缩放
Opencv API:
cv2.resize(src, dsize, fx, fy, interpolation)
输入:1.src:输入的图像;2.dsize:将图像调整到的dsize尺寸;3.fx和fy:当dsize为None时,fx和fy为图像在x轴和y轴的缩放比例因子;4.interpolation:插值方法
插值 | 含义 |
---|---|
cv2.INTER_LINEAR | 双线性插值法 |
cv2.INTER_NEAREST | 最近邻插值 |
cv2.INTER_AREA | 像素区域重采样(默认) |
cv2.INTER_CUBIC | 双三次插值 |
b.图像的翻转变换
Opencv API:
cv2.flip(src, flipcode)
输入:1.src:要翻转的图像;2.flipcode:flipcode=0 表示绕x轴翻转;flipcode=任意正整数,比如1,2,3,表示绕y轴翻转;flipcode=任意负整数,比如-1,-2,-3,表示绕x轴和y轴同时翻转
输出:一个和src相同类型的图像即src翻转后的图像
c.图像金字塔
在说明什么是图像金字塔的过程之前,我们需要需要了解一个概念:尺度
尺度,顾名思义就是说图像的尺寸和分辨率。在我们进行图像处理的时候,会经常对源图像的尺寸进行放大或者缩小的变换,进而转换为我们指定尺寸的目标图像。在对图像进行放大和缩小的变换的这个过程,我们称为尺度调整。
而图像金字塔则是图像多尺度调整表达的一种重要的方式,图像金字塔方法的原理是:将参加融合的的每幅图像分解为多尺度的金字塔图像序列,将低分辨率的图像在上层,高分辨率的图像在下层,上层图像的大小为前一层图像大小的1/4。层数为0,1,2……N。将所有图像的金字塔在相应层上以一定的规则融合,就可得到合成金字塔,再将该合成金字塔按照金字塔生成的逆过程进行重构,得到融合金字塔。这个总的思路就是一下所有基于金字塔融合的算法过程,不同点就在于分解构造的金字塔不同,每层的融合规则不一样,重构的方法不同而已。
1. 高斯金字塔 主要用于向下采样
(1)下采样
(2)上采样
OpencvAPI:
cv2.pyrUp(src) # 上采样操作
cv2.pyrDown(src) # 下采样操作
输入:src:要进行上下采样的图片
输出:采样操作后的图片
2. 拉普拉斯金字塔
代码:
img_down = cv2.pyrDown(src)
img_down_up = cv2.pyrUp(down)
img_lap=src - img_down_up
cv_show('img_lap', img_lap)
6.获取感兴趣区域ROI
对于一个图像img img[a, b, c] (a, b)为图像坐标 c为颜色通道
my_roi = img[0:100, 0:100] #获取x:0-100,y:0-100的图像