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()

💡 如何选择?

  1. 看噪声类型
    • 遇到随机白点/黑点(椒盐噪声)首选中值滤波
    • 遇到均匀的颗粒状噪声(高斯噪声),选择高斯滤波
    • 追求速度,选择均值滤波
  2. 看细节要求
    • 需要保留边缘(如人像、文字),避免使用均值滤波,优先考虑双边滤波中值滤波

THE END