图像处理-opencv(一)

目录

1、灰度图

[1.1 定义](#1.1 定义)

[1.2 表示方法](#1.2 表示方法)

[1.3 特点](#1.3 特点)

2、HSV

[2.1 HSV 三要素定义](#2.1 HSV 三要素定义)

[2.2 HSV 模型的特点](#2.2 HSV 模型的特点)

[2.3 HSV 与 RGB 的区别](#2.3 HSV 与 RGB 的区别)

3、图像阈值

[3.1 函数作用](#3.1 函数作用)

3.2、参数含义与要求

[3.3 阈值类型(type)及实例](#3.3 阈值类型(type)及实例)

[3.3.1 cv2.THRESH_BINARY(二值化)](#3.3.1 cv2.THRESH_BINARY(二值化))

[3.3.2 cv2.THRESH_BINARY_INV(反二值化)](#3.3.2 cv2.THRESH_BINARY_INV(反二值化))

[3.3.3 cv2.THRESH_TRUNC(截断)](#3.3.3 cv2.THRESH_TRUNC(截断))

[3.3.4 cv2.THRESH_TOZERO(归零)](#3.3.4 cv2.THRESH_TOZERO(归零))

[3.3.5 cv2.THRESH_TOZERO_INV(反归零)](#3.3.5 cv2.THRESH_TOZERO_INV(反归零))

[3.4 返回值ret的作用](#3.4 返回值ret的作用)

4、图像平滑

[4.1 核心原理](#4.1 核心原理)

[4.2 常见的图像平滑方法](#4.2 常见的图像平滑方法)

[4.2.1. 均值滤波(Mean Filtering)](#4.2.1. 均值滤波(Mean Filtering))

[4.2.2. 高斯滤波(Gaussian Filtering)](#4.2.2. 高斯滤波(Gaussian Filtering))

[4.2.3. 中值滤波(Median Filtering)](#4.2.3. 中值滤波(Median Filtering))

[4.2.4. 双边滤波(Bilateral Filtering)](#4.2.4. 双边滤波(Bilateral Filtering))

[4.3 平滑方法的选择依据](#4.3 平滑方法的选择依据)


1、灰度图

灰度图(Grayscale)是指只含亮度信息,不含色彩信息的图像,其外观类似黑白照片

1.1 定义

灰度图中的每个像素只有一个亮度值,通常用一个 8 位或 16 位的整数表示。8 位灰度图的亮度值范围是 0 到 255,其中 0 代表黑色,255 代表白色,介于两者之间的值代表不同程度的灰色。

1.2 表示方法

灰度图是单通道图像,即每个像素仅由一个灰度值来表示其亮度水平,不像彩色图像那样由多个颜色通道组成。

1.3 特点

数据简化由于仅包含灰度信息,灰度图像的数据量比彩色图像小,处理起来更为简单高效。
易于处理:许多图像处理技术,如边缘检测、图像分割、特征提取等,在灰度图像上的实现更为直接和简单。

2、HSV

HSV(Hue, Saturation, Value)是一种基于人眼对色彩感知的颜色模型,它将颜色分解为三个直观的维度。

2.1 HSV 三要素定义

HSV 模型通过 色调(H)、饱和度(S)、明度(V) 三个独立分量描述颜色,三个维度共同决定最终呈现的色彩,具体含义如下:

2.2 HSV 模型的特点

相比 RGB(红、绿、蓝)等基于硬件的颜色模型,HSV 具有更贴近人类视觉感知的优势:
直观性强:调整颜色时,可独立控制 "色调(换颜色)""饱和度(调鲜艳度)""明度(调明暗)",无需像 RGB 那样同时调整三个通道(如想让红色变亮,只需提高 V,无需修改 R/G/B 比例)。
分量独立:三个维度互不干扰 ------ 例如,改变饱和度(S)不会影响色调(H)和明度(V),改变明度(V)也不会改变颜色的种类和纯净度。
适合色彩选择:在设计软件(如 Photoshop、Figma)或图像编辑工具中,HSV 色轮能快速定位目标颜色,尤其适合需要精细调整色彩氛围的场景(如将图片色调从 "冷蓝" 改为 "暖黄",只需调整 H 值)。

2.3 HSV 与 RGB 的区别RGB 和 HSV 是两种最常用的颜色模型,但核心逻辑完全不同,具体差异如下:

|-------|---------------------------|--------------------------------------------|
| 对比维度 | HSV 模型 | RGB 模型 |
| 核心逻辑 | 基于人类视觉感知 (色调、饱和度、明度) | 基于硬件显示 (红、绿、蓝三原色叠加) |
| 分量含义 | 分量独立,对应色彩的直观属性 | 分量为三原色的亮度值,无直接 "色彩意义" |
| 调色便捷性 | 高:可直接调整 "颜色种类 / 鲜艳度 / 明暗" | 低:需同时调整三通道,且效果不直观(如 "让蓝色更鲜艳" 需调整 R/G/B 比例) |
| 适用场景 | 图像编辑、色彩设计、视觉效果调整 | 屏幕显示、数字图像存储、硬件驱动 |

3、图像阈值

OpenCV 中图像阈值化的核心函数cv2.threshold(),它是将灰度图像转换为二值化图像(或特定阈值处理图像)的关键工具。以下是对该函数及各参数的详细解读,结合实例帮助理解:

3.1 函数作用

cv2.threshold()通过设定一个固定阈值,将单通道图像(通常是灰度图)的像素值根据阈值规则进行转换,实现图像的简化(如突出目标区域、去除背景)。

3.2、 参数含义与要求

src 输入图像,必须是单通道图像(灰度图),不能直接输入彩色图(需先转灰度)。
dst 输出图像,与输入图像尺寸、类型一致,存储阈值处理后的结果。
thresh 设定的阈值(如 127),用于判断像素值的分割标准。
maxval 当像素值满足阈值条件时,赋予的最大值(通常设为 255,即白色)。
type 阈值处理的类型,决定像素值如何根据thresh和maxval转换(核心参数)。

3.3 阈值类型(type)及实例

像素值为p,阈值thresh=127,maxval=255,以下是 5 种类型的转换规则及效果:

3.3.1 cv2.THRESH_BINARY(二值化)

规则:p > thresh → maxval(255);p ≤ thresh → 0
效果:阈值以上为白色,以下为黑色(最常用的二值化方式)。

3.3.2 cv2.THRESH_BINARY_INV(反二值化)

规则:p > thresh → 0;p ≤ thresh → maxval(255)
效果:与THRESH_BINARY相反,阈值以上为黑色,以下为白色。

3.3.3 cv2.THRESH_TRUNC(截断)

规则:p > thresh → thresh(127);p ≤ thresh → p(不变)
效果:阈值以上的像素统一设为阈值(如 127),以下保持原样(图像亮部被 "截断")。

3.3.4 cv2.THRESH_TOZERO(归零)

规则:p > thresh → p(不变);p ≤ thresh → 0
效果:阈值以下的像素设为黑色,以上保持原样(只保留亮部)。

3.3.5 cv2.THRESH_TOZERO_INV(反归零)

规则:p > thresh → 0;p ≤ thresh → p(不变)
效果:与THRESH_TOZERO相反,阈值以上的像素设为黑色,以下保持原样(只保留暗部)。

3.4 返回值ret的作用

函数返回两个值:ret和dst。
dst是处理后的图像(核心结果)。
ret是实际使用的阈值(在固定阈值场景下与thresh相同;在自适应阈值等场景中,ret可能是算法自动计算的阈值)。

复制代码
ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)

titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in range(6):
    plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

4、图像平滑

图像平滑(Image Smoothing)是一种基础的图像处理技术,主要通过抑制图像中的高频分量(如噪声、细节边缘)来减少图像噪声,使图像变得更模糊、更平滑,同时保留重要的低频信息(如大面积的区域特征)。它是图像预处理中的常用步骤,为后续的边缘检测、特征提取等操作提供更干净的图像数据。

4.1 核心原理

图像中的噪声通常表现为 像素值的突变 (高频信号),而平滑处理的本质是 对像素周围的邻域进行加权平均 ,通过 "平均" 操作抵消突变的像素值,从而降低噪声。常见的实现方式是使用 卷积核(滤波器) 对图像进行卷积运算:将卷积核覆盖在每个像素上,计算核内所有像素的加权和,作为中心像素的新值。

4.2 常见的图像平滑方法

根据卷积核的设计和计算方式不同,图像平滑可分为以下几类:

4.2.1. 均值滤波(Mean Filtering)

  • 原理:使用一个固定大小的滑动窗口(如 3×3、5×5),将窗口内所有像素的平均值作为中心像素的新值。

  • 卷积核 :窗口内所有元素均为 1/(窗口面积)(确保加权和后亮度不变),例如 3×3 核为:

    [[1/9, 1/9, 1/9],
    [1/9, 1/9, 1/9],
    [1/9, 1/9, 1/9]]

  • 特点

    • 简单高效,能有效去除高斯噪声等随机噪声。
    • 缺点:过度平滑会模糊图像边缘和细节(因为边缘也是高频信号,会被同时抑制)。
  • OpenCV 实现

    import cv2
    img = cv2.imread('image.jpg')

    3×3均值滤波

    mean_blur = cv2.blur(img, (3, 3))

4.2.2. 高斯滤波(Gaussian Filtering)

  • 原理 :使用高斯核进行卷积,核内像素的权重遵循高斯分布(中心像素权重最高,向四周逐渐减小),更接近人眼对邻域像素的感知。
  • 卷积核:例如 3×3 高斯核(σ 为标准差,控制权重衰减速度):

\[0.0751, 0.1238, 0.0751\], \[0.1238, 0.2042, 0.1238\], \[0.0751, 0.1238, 0.0751\]

  • 特点

    • 相比均值滤波,在平滑噪声的同时,能更好地保留图像边缘(因为中心像素权重更高,对边缘的模糊更少)。
    • 适用于去除高斯噪声(图像中最常见的噪声类型之一)。
  • OpenCV 实现

    3×3高斯滤波,sigmaX=1(X方向标准差)

    gaussian_blur = cv2.GaussianBlur(img, (3, 3), sigmaX=1)

4.2.3. 中值滤波(Median Filtering)

  • 原理 :与均值滤波类似,但不计算平均值,而是取窗口内所有像素值的中值作为中心像素的新值。

  • 特点

    • 椒盐噪声(Salt-and-Pepper Noise,即图像中的黑白斑点) 效果极佳(因为中值能有效剔除极端异常值)。
    • 相比均值滤波,边缘保留更好(不会因极端值影响平均结果)。
    • 缺点:计算速度较慢(需排序取中值),且对高斯噪声的抑制效果不如高斯滤波。
  • OpenCV 实现

    3×3中值滤波

    median_blur = cv2.medianBlur(img, 3) # 注意:核大小为奇数(3,5,7...)

4.2.4. 双边滤波(Bilateral Filtering)

  • 原理 :在高斯滤波的基础上,增加了像素值相似度权重------ 不仅考虑空间距离(越近权重越高),还考虑像素值差异(差异越小权重越高)。

  • 特点

    • 能在平滑噪声的同时,几乎不模糊边缘(因为边缘处像素值差异大,权重低,不会被过度平均)。
    • 适用于需要保留边缘的场景(如人像美颜、细节保留平滑)。
    • 缺点:计算复杂度高,速度较慢。
  • OpenCV 实现

    d=5(邻域直径),sigmaColor=100(颜色相似度标准差),sigmaSpace=100(空间距离标准差)

    bilateral_blur = cv2.bilateralFilter(img, d=5, sigmaColor=100, sigmaSpace=100)

4.3 平滑方法的选择依据

|--------|------|--------------|
| 噪声类型 | 推荐方法 | 核心优势 |
| 高斯噪声 | 高斯滤波 | 平滑效果好,边缘保留较好 |
| 椒盐噪声 | 中值滤波 | 有效剔除极端异常值 |
| 需保留边缘时 | 双边滤波 | 平滑噪声的同时不模糊边缘 |
| 简单快速处理 | 均值滤波 | 计算量小,适合快速预处理 |

相关推荐
StarPrayers.3 小时前
损失函数(Loss Function)、反向传播(Backward Propagation)和优化器(Optimizer)学习笔记
人工智能·笔记·深度学习·学习
IT_陈寒3 小时前
Vite 5个隐藏技巧让你的项目构建速度提升50%,第3个太香了!
前端·人工智能·后端
孤廖3 小时前
吃透 C++ 栈和队列:stack/queue/priority_queue 用法 + 模拟 + STL 标准实现对比
java·开发语言·数据结构·c++·人工智能·深度学习·算法
麦麦麦造3 小时前
有了 MCP,为什么Claude 还要推出 Skills?
人工智能·aigc·ai编程
jerryinwuhan3 小时前
利用舵机实现机器人行走
人工智能·机器人
武子康3 小时前
AI-调查研究-107-具身智能 强化学习与机器人训练数据格式解析:从状态-动作对到多模态轨迹标准
人工智能·深度学习·机器学习·ai·系统架构·机器人·具身智能
沫儿笙3 小时前
KUKA库卡焊接机器人二氧化碳节气
人工智能·机器人
insight^tkk4 小时前
【Docker】记录一次使用docker部署dify网段冲突的问题
运维·人工智能·docker·ai·容器
攻城狮7号4 小时前
AI+大数据时代:如何从架构到生态重构时序数据库的价值?
大数据·人工智能·时序数据库·apache iotdb·sql大模型