OpenCV-2.基于OpenCV图像操作
条评论OpenCV(Open Source Computer Vision Library),是一个跨平台的计算机视觉库。OpenCV由英特尔公司发起并参与开发(美国公司还是强大),以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。[1][2]
OpenCV可解决增强现实、人脸识别、手势识别、人机交互、动作识别、运动追踪、物体识别、图像分割、机器人等领域问题。
注:opencv篇实验操作的图片数据集地址:deeplearning-datasets;其中绝大多数操作使用大名鼎鼎的lena阿姨照片实验;
1 | import cv2 |
图像色彩操作
图像色彩调整
亮度调整
- HSV色彩空间V分量可改变图像亮度;
- YUV色彩空间Y分量可改变图像亮度;
- HSV和YUV都可以调整图像的亮度,但结果不太相同,原因是YUV的亮度信号Y还有两个色差信号R-Y、B-Y。
1 | # -*- coding: utf-8 -*- |
饱和度调整
- 对HSV空间的S分量进行处理可以实现对图像饱和度的增强;
- 饱和度的调整通常是在S原始值上乘以一个修正系数;
- 修正系数大于1,会增加饱和度,使图像的色彩更鲜明;
- 修正系数小于1,会减小饱和度,使图像看起来比较平淡;
色调调整
- 对HSV空间的H分量进行处理可以实现对图像色调的增强;
- 色相H的值对应的是一个角度,并且在色相环上循环,色相的修正可能会造成颜色的失真;
- 色相的调整方式为在H原始值上加一个小的偏移量,使其在色相环上有角度的调整,调整后,图像的色调会变为冷色或者暖色;
图像灰度化
在RGB模型中,如果R=G=B时,则表示一种灰度颜色,其值叫灰度值;灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为[0, 255]。
图像灰度化处理方法
将RGB图像转换为灰度图像的过程称为图像灰度化处理,方法有:
- 分量法:将彩色图像中的三分量中的亮度作为灰度值,根据需要选取其中一分量;
- 最大值法:将彩色图像中的三分量中亮度的最大值作为灰度图的灰度值;
- 平均值法:将彩色图像中的三分量亮度求平均得到一个灰度值;
- 加权平均法:根据重要性及其它指标,将三个分量以不同的权值进行加权平均,如:人眼对绿色的敏感最高,对蓝色敏感最低,对RGB三分量进行加权平均能得到较合理的灰度图像。
$f(i,j)=0.30R(i,j)+0.59G(i,j)+0.11B(i,j)$
图像二值化与反二值化
二值化
- 灰度值大于阈值的像素点,灰度值设为最大值255;
- 灰度值小于或等于阈值的像素点,灰度值设为0;
反二值化
与二值化相反:
- 灰度值大于阈值的像素点,灰度值设为最大值0;
- 灰度值小于或等于阈值的像素点,灰度值设为255;
图像直方图均衡化
图像直方图
灰度直方图反映的是一幅图像中各灰度级像素出现的频率,即灰度的分布情况。灰度级为横坐标,灰度级的频率为纵坐标,灰度级与灰度级频率的关系图为灰度直方图。
改变图像的灰度直方图,修改图像中各像素的灰度值,可达到增强图像视觉效果的目的。灰度变化只针对单独的像素点操作,直方图变化综合考虑了全图的灰度值分布。
图像直方图均衡化
直方图均衡化将原始图像的直方图,即灰度概率分布图,进行调整,使之变化为均衡分布的样式,达到灰度级均衡的效果,可以有效增强图像的整体对比度。
直方图均衡化能够自动的计算变化函数,通过该方法自适应得产生有均衡直方图的输出图像,能够对图像过暗、过亮和细节不清晰的图像得到有效的增强。
图像形态操作
仿射与透视变换
仿射变换是指图像可以通过一系列的几何变换来实现平移、镜像、旋转等多种操作。
仿射变换
- 平移
- 镜像
- 旋转
透视变换
透视变换是将图片投影到一个新的视平面,也称作投影映射。它是二维$(x,y)$到三维$(x,y,z)$,再到另一个二维$(x’,y’)$空间的映射;相比仿射变换,其具灵活性更强,透视变换可用于图像形状校正;
图像算数计算
图像加法
- 图像加法可以用于多幅图像平均去除噪声;
- 图像加法实现水印的叠加;
图像减法
- 图像减法是找出两幅图像的差异,可在连续图像中可以实现背景消除和运动检测;
图像缩放
图像缩放(Image Scaling)是指对数字图像的大小进行调整的过程。将分辨率为$(w,h)$的图像,缩放为$(w’, h’)$的图像。
图像放大
图像放大需要进行像素插入,常用的插值法有最邻近插值法和双线性插值法:
- 最邻近插值法:直接使用新的像素点$(x’, y’)$最近的整数坐标灰度值作为该点的值,该方法计算量小,但精确度不高,并且可能破坏图像中的线性关系;
- 双线性插值法:使用新的像素点$(x’, y’)$最邻近的四个像素值进行插值计算,假设为$(i, j),(i+1, j),(i, j+1),(i+1, j+1)$;则$u=x’-i, v=y’-j$。
图像缩小
图像缩小通过删除矩阵中的元素来实现,如:隔行、隔列删除,高度、宽度均减小为原来的一半。
图像腐蚀与膨胀
图像腐蚀
图像腐蚀可将图像的边界点消除,使图像沿着边界向内收缩,也可将小于指定结构体元素的部分去除。腐蚀用来“收缩”或“细化”二值图像中的前景,借此实现去除噪声、元素分割等功能。
图像膨胀
图像膨胀可根据原图像的形状,向外进行扩充,膨胀操作可填补图像分割后存在的空白。
图像开运算
开运算是先将图像腐蚀,再进行膨胀。
- 开运算可去噪、计数等;
- 开运算可取出主题图像之间细小的连接;
图像闭运算
闭运算是先将图像膨胀、再进行腐蚀。
- 可关闭前景物体内部的小孔,去除物体上的小黑点;
- 可将不同的前景图像进行连接;
图像形态学梯度
形态学梯度运算是用图像的膨胀图像减腐蚀图像的操作,该操作可以获取原始图像中前景图像的边缘。
图像礼帽运算
图像礼帽运算是用原始图像减去开运算图像的操作。礼帽运算能够获取图像的噪声信息,或者得到比原始图像的边缘更亮的边缘信息。
图像黑帽运算
图像黑帽运算是用闭运算图像减去原始图像的操作。黑帽运算能够获取图像内部的小孔, 或前景色中的小黑点,或者得到比原始图像的边缘更暗的边缘部分.
图像梯度处理
图像梯度
图像梯度计算的是图像变化的速度,一般用于图像的边缘信息计算。
- 对于图像的边缘部分,其灰度值变化较大,梯度值也较大;
- 对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小;
图像模块运算
模板(滤波器)是一个尺寸为$n*n$的小图像W(n一般取奇数,称为模板尺寸),每个位置上的值w被称为权重。在进行计算时,将模板的中心和像素P对齐,选取原始图像中和模板相同范围的邻域N的像素值作为输入。
模板卷积的计算是将对齐后的对应位置像素相乘,再进行累加作为像素P位置的输出值。记原始图像的像素灰度值为s,计算后的值为d,则P点的输出值:$d=\frac{\sum w_{i}s_{i}}{\sum w_{i}}$
模板排序的计算是将邻域N的像素值进行排序,选择特定次序的灰度值,作为像素P位置的输出值,如最大值、最小值、中位数等。
图像均值滤波
均值滤波指模板权重都为1的滤波器。它将像素的邻域平均值作为输出结果,均值滤波可以起到图像平滑的效果,可以去除噪声,但随着模板尺寸的增加图像会变得更为模糊,经常被作为模糊化使用。
图像高斯滤波
为了减少模板尺寸增加对图像的模糊化,可以使用高斯滤波器,高斯滤波的模板根据高斯分布来确定模板系数,接近中心的权重比边缘的大。
图像中值滤波
中值滤波属于模板排序运算的滤波器。中值滤波器将邻域内像素排序后的中位数值输出代替原像素值。它在实现降噪操作的同时,保留了原始图像的锐度,不会修改原始图像的灰度值。
中值滤波的使用非常普遍,它对椒盐噪声的抑制效果很好,在抑制随机噪声的同时能有效保护边缘少受模糊。但中值滤波是一种非线性变化,它可能会破坏图像中线性关系,对于点、线等细节较多的图像和高精度的图像处理任务中并不太合适。
图像边缘检测
通过梯度计算可以获取图像中细节的边缘。为在锐化边缘的同时减少噪声的影响,通过改进梯度法发展出了不同的边缘检测算子:
- 一阶梯度:Prewitt梯度算子、Sobel梯度算子;
- 二阶梯度:Laplacian梯度算子;
图像锐化
图像锐化与图像平滑是相反的操作,锐化是通过增强高频分量来减少图像中的模糊,增强图像细节边缘和轮廓,增强灰度反差,便于后期对目标的识别和处理。锐化处理在增强图像边缘的同时也增加了图像的噪声。将求取的边缘按照一定系数比例叠加到原始图像上,即可实现对图像的锐化操作。
图像轮廓处理
图像轮廓
边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。 图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。图像轮廓是图像中非常重要的一个特征信息,通过对图像轮廓的操作,能够获取目标图像的大小、位置、方向等信息。图像轮廓操作包括:查找轮廓、绘制轮廓、轮廓拟合等。
图像轮廓查找与绘制
一个轮廓对应着一系列的点,这些点以某种方式表示图像中的一条曲线,将这些点 绘制成不同样式的线条,就是轮廓查找与绘制
图像轮廓拟合
在计算轮廓时,可能并不需要实际的轮廓,而仅需要一个接近于轮廓的近似多边形,绘制这个近似多边形称之为轮廓拟合。
图像最小包围圆形与矩形包围形
图像最优拟合椭圆
图像多边形逼近
图像预处理AI应用
解决AI训练数据时图像样本不足问题,主要对图像进行图像数据增强:
- 缩放
- 裁剪
- 旋转
- 镜像
- 平移
- 加入噪点
- 颜色饱和度改变
- 对比度调整
- 通道变化