- Published on
OpenCV 入门
OpenCV 是 一 个 开 源 的 计 算 机 视 觉 库
[噪声] - 在图像上常表现为引起较强视觉效果的孤立像素点或像素块,使得图像模糊不清。
[GRAY色彩空间] - 通常指的是灰度图像,灰度图像是一种每个像素都是从黑到白,被处理为256个灰度级别的单色图像 “0”表示纯黑色, “255”表示纯白色
BGR色彩空间是基于三基色而言的,三基色指的是红色、绿色和蓝色。
而HSV色彩空间则是基于色调、饱和度和亮度而言的。 色调(H)是指光的颜色 饱和度(S)是指色彩的深浅。在OpenCV中,饱和度在区间[0,255]内取值。当饱和度为0时,图像将变为灰度图像。 亮度(V)是指光的明暗。与饱和度相同,在OpenCV中,亮度在区间[0, 255]内取值。亮度值越大,图像越亮;当亮度值为0时,图像呈纯黑色。
用于设置图像透明度的A通道,即alpha通道。
线段的绘制 img = cv2.line(img, pt1, pt2, color, thickness)
矩形的绘制 img = cv2.rectangle(img, pt1, pt2, color, thickness)
圆形的绘制 img = cv2.circle(img, center, radius, color, thickness)
多边形的绘制 img = cv2.polylines(img, pts, isClosed, color, isClosed:如果值为True,表示一个闭合的多边形;如果值为False,表示一个不闭合的多边形。
文字的绘制 img = cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)
缩放 dst = cv2.resize(src, dsize, fx, fy, interpolation)
[二值化处理] - 也叫二值化阈值处理,该处理让图像仅保留两种像素值,或者说所有像素都只能从两种值中取值。
if 像素值 <= 阈值: 像素值 = 0
if 像素值 > 阈值: 像素值 = 最大值
通常二值化处理是使用255作为最大值,因为灰度图像中255表示纯白色,能够很清晰地与纯黑色进行区分,所以灰度图像经过二值化处理后呈现“非黑即白”的效果。
反二值化处理也叫反二值化阈值处理,其结果为二值化处理的相反结果。将大于阈值的像素值变为0,将小于或等于阈值的像素值变为最大值
if 像素值 <= 阈值: 像素值 = 最大值
if 像素值 > 阈值: 像素值 = 0
掩模,也叫作掩码,英文为mask,在程序中用二值图像来表示:0值(纯黑)区域表示被遮盖的部分,255值(纯白)区域表示暴露的部分
在尽量保留原图像信息的情况下,去除图像内噪声、降低细节层次信息等一系列过程,叫作图像的平滑处理(或图像的模糊处理)。实现平滑处理最常用的工具就是滤波器。
矩 形 包 围 框 是 指 图 像 轮 廓 的 最 小 矩 形 边 界 。 retval = cv2.boundingRect (array)
凸包是最逼近轮廓的多边形,凸包的每一处都是凸出来的,也就是任意3个点组成的内角均小于180°。
OpenCV提供的convexHull()方法可以自动找出轮廓的凸包 hull = cv2.convexHull(points, clockwise, returnPoints)
Canny边缘检测 - 该算法根据像素的梯度变化寻找图像边缘,最终可以绘制十分精细的二值边缘图像。
霍夫变换是一种特征检测,通过算法识别图像的特征,从而判断图像中的特殊形状,例如直线和圆。
读取并显示摄像头视频
------视频是由大量的图像构成的,把这些图像称作帧。--------------
capture = cv2.VideoCapture(index) 当index的值为0时,表示要打开的是第1个摄像头;对于64位的Windows 10笔记本,当index的值为0时,表示要打开的是笔记本内置摄像头
在 OpenCV 中,滤波器主要分为平滑(低通)滤波器和边缘检测(高通)滤波器。下表汇总了最常见的 4 种平滑滤波器,用于去噪和模糊处理。
📊 OpenCV 四大平滑滤波器对比
| 滤波器 | 核心原理 | 核心特点 | 适用场景 | OpenCV 函数 |
|---|---|---|---|---|
| 均值滤波 | 计算核内所有像素的平均值来替换中心像素。 | 优点:算法简单,计算速度快。 缺点:会模糊边缘,细节丢失严重。 | 快速去噪、背景平滑、对细节要求不高的预处理。 | cv::blur() |
| 高斯滤波 | 根据高斯分布分配权重,离中心越近的像素权重越大。 | 优点:比均值滤波保留更多边缘,自然平滑。 缺点:仍会模糊边缘,无法完全避免。 | 去除高斯噪声、通用图像预处理、特征提取前的平滑。 | cv::GaussianBlur() |
| 中值滤波 | 取核内所有像素的中位数来替换中心像素。 | 优点:完美去除椒盐噪声,极好地保留边缘细节。 缺点:计算量较大,处理时间较长。 | 去除椒盐噪声、脉冲噪声(如文档扫描去噪)。 | cv::medianBlur() |
| 双边滤波 | 同时考虑空间距离和像素值相似度进行加权平均。 | 优点:在平滑噪声的同时,能极好地保留边缘(保边去噪)。 缺点:计算速度非常慢。 | 人脸美化(磨皮)、高细节保留场景(如医学图像、高清摄影)。 | cv::bilateralFilter() |
💡 如何选择?
- 看噪声类型:
- 遇到随机白点/黑点(椒盐噪声),首选中值滤波。
- 遇到均匀的颗粒状噪声(高斯噪声),选择高斯滤波。
- 追求速度,选择均值滤波。
- 看细节要求:
- 需要保留边缘(如人像、文字),避免使用均值滤波,优先考虑双边滤波或中值滤波。
THE END